LoginSignup
9

More than 3 years have passed since last update.

posted at

updated at

NeovimのBuiltin LSPを使ってみる

はじめに

最近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

"基本的にこれだけでOK
lua require'nvim_lsp'.tsserver.setup{}

"omnifuncを設定
autocmd Filetype typescript setlocal omnifunc=v:lua.vim.lsp.omnifunc

"lsp.txtそのまま
nnoremap <silent> gd    <cmd>lua vim.lsp.buf.declaration()<CR>
nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR>
nnoremap <silent> K     <cmd>lua vim.lsp.buf.hover()<CR>
nnoremap <silent> gD    <cmd>lua vim.lsp.buf.implementation()<CR>
nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
nnoremap <silent> 1gD   <cmd>lua vim.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>)のオムニ補完です。
実行と同時に新しいバッファが開きますが、なにも表示されずよくわかりません。
補完.gif
virtual textが荒ぶってますが、ちゃんと候補が出てきます。

補完できない.gif
しかし、文字の途中で補完を呼び出すとうまく動きません。

エラー表示

virtual textで表示されます。
エラー.gif

フォーマット

動きます。

vim.lsp.buf.formatting()
フォーマット.gif

ホバー

floating windowで表示されます。
ウィンドウが出ている間にもう一度呼び出すと(この場合K)floating windowにフォーカスが行きます。

vim.lsp.buf.hover()
ホバー.gif

シグネチャヘルプ

ホバーと同様に表示されます。
vim.lsp.buf.signature_help()
シグネチャ.gif

ジャンプ

定義と実装それぞれに移動できます。

vim.lsp.buf.implementation()
ジャンプ.gif

vim.lsp.buf.definition vim.lsp.buf.type_definition()
型定義ジャンプ.gif

おわりに

virtual textや補完周りが気になりますが、動くようにはなっていますね。
ドキュメント等にもTODOが目立つので今後に期待です。

備考


  1. NeovimとVimとでは、Luaのvimモジュールに互換性はありません。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9