LoginSignup
9

More than 3 years have passed since last update.

NeovimのBuiltin LSPを使ってみる

Last updated at Posted at 2019-12-21

はじめに

最近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
  3. You can use dark theme
What you can do with signing up
9