CommonLisp 環境構築 with Neovim

SBCLの環境構築はここを参考に

Neovimのプラグイン

  • nvlime
  • lazy.nvim (今回のテーマとは関係ないですが)

SBCLの立ち上げ時にquicklispを読み込んでくれない

  • こういう時はHelp:h nvlimeをチェック
  • 起動関数をカスタマイズできるっぽい? のでプラグインマネージャの起動タイミングで呼んでみる
vim.g.nvlime_config = {
    implementation = "custom"
}

local setup_lisp_file_path = vim.fn.expand('$HOME/quicklisp/setup.lisp')

local fn = string.format([[
function! NvlimeBuildServerCommandFor_custom(nvlime_loader, nvlime_eval)
return [ "sbcl",
\ "--load", "%s",
\ "--load", a:nvlime_loader,
\ "--eval", a:nvlime_eval]
endfunction
]], setup_lisp_file_path)

vim.api.nvim_exec(fn, false)

簡単な使い方

使う頻度の高いものだけ一覧にしてみた。( :h nvlime-tutor 読んでみるのがいいかも)

  • <leader>rr サーバー立ち上げ
  • <leader>si replにコマンド送信
  • <leader>cd サーバー停止
  • <leader>rt サーバー再起動
  • <leader><enter> で interactiveモード?
    • これになるとnormalモードでenter押すとreplで解釈してくれる。

サーバー立ち上げ時に自分のPackageがquicklispのマネジメント配下にいない問題

  • サーバー立ち上げ時に作業中のpackageを読み込ませておきたいので、ローカルに指定ファイルがあったら初期化時に読み込むように作り変えた。
    • source
    • 僕の設定だと、.sbcl.lispがあったら読み込むようにしている。

そもそもの開発Packageをasdfに読み込ませる方法

  • asdf:*central-registry*という変数の中にディレクトリのリストが入っていて、そこをチェックするっぽいので登録する。
 (let ((packages '("project/"
                   "project/sub-module/")))
   (loop for p in packages
         do (let ((path (merge-pathnames  p (user-homedir-pathname))))
              (pushnew path asdf:*central-registry* :test #'equal))))