はじめに
最近NeovimにLSPクライアントが入りました。
まだ入ったばかりの機能なので、今後使い方が変更される可能性があります。
Neovimのバージョンは NVIM v0.5.0-252-gee7ac469c, LSはtsserverを使用します。
環境はMicrosoft Terminal内のWSL(Ubuntu 18.04)です。
他の言語で試す場合は、適時読み替えてください。
設定
nvim-lsp
neovim/nvim-lspを使います。
このリポジトリは各LSの設定集です。
vim-lspにおけるvim-lsp-settingsと同じものですね。
deinを使っているのでTOMLファイルに追記します。
[[plugins]]repo='neovim/nvim-lsp'
init.vim
NeovimのLSPクライアントはLuaで書かれているので呼び出しもLuaです。1
"基本的にこれだけでOKlua require'nvim_lsp'.tsserver.setup{}"omnifuncを設定
autocmd Filetype typescript setlocal omnifunc=v:lua.vim.lsp.omnifunc
"lsp.txtそのまま
nnoremap <silent> gd <cmd>luavim.lsp.buf.declaration()<CR>
nnoremap <silent><c-]><cmd>luavim.lsp.buf.definition()<CR>
nnoremap <silent> K <cmd>luavim.lsp.buf.hover()<CR>
nnoremap <silent> gD <cmd>luavim.lsp.buf.implementation()<CR>
nnoremap <silent><c-k><cmd>luavim.lsp.buf.signature_help()<CR>
nnoremap <silent>1gD <cmd>luavim.lsp.buf.type_definition()<CR>
tsserver
nvim-lspが入っていればvim内からコマンドでインストールできるみたいですが、今回はnpmでインストールしました。
:LspInstall tsserver
or npm i -g typescript-language-server
ディレクトリ
デフォルトではルートディレクトリの設定がpackage.jsonになっているので適当に作ります。
npm init -y
npm -D i tyepscript
touch index.ts
使ってみる
準備が終わったので各機能を見ていきます。
補完
手動(<C-X><C-O>
)のオムニ補完です。
実行と同時に新しいバッファが開きますが、なにも表示されずよくわかりません。
virtual textが荒ぶってますが、ちゃんと候補が出てきます。
エラー表示
フォーマット
動きます。
ホバー
floating windowで表示されます。
ウィンドウが出ている間にもう一度呼び出すと(この場合K
)floating windowにフォーカスが行きます。
シグネチャヘルプ
ホバーと同様に表示されます。vim.lsp.buf.signature_help()
ジャンプ
定義と実装それぞれに移動できます。
vim.lsp.buf.definition
vim.lsp.buf.type_definition()
おわりに
virtual textや補完周りが気になりますが、動くようにはなっていますね。
ドキュメント等にもTODOが目立つので今後に期待です。
備考
NeovimとVimとでは、Luaのvimモジュールに互換性はありません。 ↩