vlime
#Vimプラグイン #Common_Lisp #Vim
概要
Vim/Neovim向けのCommon Lisp開発環境
インストール
lazy.nvimでのインストール例)
code:init.lua
-- lazy.nvim
require("lazy").setup({
{
"vlime/vlime",
ft = 'lisp',
config = function(plugin)
vim.opt.rtp:append(plugin.dir .. "/vim")
end
},
-- ...
)
必須ではありませんが、mondoというツールがあり、そちらとVlimeを連携すると便利です
設定
code:vim
" Leaderを,に設定
let g:vlime_leader = ","
起動方法
1. <vlime-leader>rrでサーバーの起動と接続が可能です
2. もしくは、Vlimeをコマンドラインから起動し、<vlime-leader>ccで接続することも可能です
code:shell
# Roswellでの起動例
$ ros run --load ~/.local/share/nvim/lazy/vlime/lisp/start-vlime.lisp
バッファー
:h vlime-buffer-types
vlime_server
vlime_repl
vlime_inspector
キーマッピング
<vlime-leader>? - Vlimeのキーマッピングを確認する
<vlime-leader>cc - 既存のサーバーへ接続する
<vlime-loader>cd - サーバーへの接続を切断する
<vlime-leader>rr - サーバーを起動し、vlime_serverバッファーを表示します (起動する処理系はg:vlime_cl_implで設定できる)
<vlime-leader>rs - サーバーを停止する
<vlime-leader>rv - vlime_serverバッファーを表示する
<vlime-leader>rV - 起動しているサーバーを一覧表示します
<vlime-leader>ss - 選択している行をREPLへ送る
使い方
vlimeからRoswellを利用する
code:vim
let g:vlime_cl_impl = "ros"
function! VlimeBuildServerCommandFor_ros(vlime_loader, vlime_eval) abort
return ["ros", "run",
\ "--load", a:vlime_loader,
\ "--eval", a:vlime_eval]
endfunction
vlimeからqlotを利用する
code:vim
let g:vlime_cl_impl = "qlot"
function! VlimeBuildServerCommandFor_qlot(vlime_loader, vlime_eval) abort
return "qlot", "exec", "ros", "run", "--load", a:vlime_loader, "--eval", a:vlime_eval
endfunction
mondoとの連携
mondoを参照
asyncomplete.vimとの統合
vimrcに以下の設定を書いておくと、asyncomplete.vimを使った自動補完ができるようになります。
code:vim
autocmd User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#vlime#get_source_options({ 'priority': 10 }))
トラブルシューティング
REPLの接続に失敗する(Neovim)
,rrでREPLへ接続に失敗してしまう場合、g:vlime_neovim_connectorのデフォルト値にncatが設定されているため、ncatが入っていない場合に、コマンドの実行に失敗してしまいます
ncatをインストールするか、以下のようにnc(netcat)コマンドを利用するよう設定すると回避できます(将来的にg:vlime_neovim_connectorは非推奨化されるようなので注意)
code:vim
let g:vlime_neovim_connector = "nc"
function! VlimeBuildConnectorCommandFor_nc(host, port, timeout)
if type(a:timeout) == type(v:null)
return 'nc', a:host, string(a:port)
else
return 'nc', '-w', string(a:timeout / 1000.0), a:host, string(a:port)
endif
endfunction
参考
Lisp in Vim with Slimv or Vlime