Quantcast
Viewing all articles
Browse latest Browse all 5712

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

"基本的にこれだけで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>)のオムニ補完です。
実行と同時に新しいバッファが開きますが、なにも表示されずよくわかりません。
Image may be NSFW.
Clik here to view.
補完.gif

virtual textが荒ぶってますが、ちゃんと候補が出てきます。

Image may be NSFW.
Clik here to view.
補完できない.gif

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

エラー表示

virtual textで表示されます。
Image may be NSFW.
Clik here to view.
エラー.gif

フォーマット

動きます。

vim.lsp.buf.formatting()
Image may be NSFW.
Clik here to view.
フォーマット.gif

ホバー

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

vim.lsp.buf.hover()
Image may be NSFW.
Clik here to view.
ホバー.gif

シグネチャヘルプ

ホバーと同様に表示されます。
vim.lsp.buf.signature_help()
Image may be NSFW.
Clik here to view.
シグネチャ.gif

ジャンプ

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

vim.lsp.buf.implementation()
Image may be NSFW.
Clik here to view.
ジャンプ.gif

vim.lsp.buf.definitionvim.lsp.buf.type_definition()
Image may be NSFW.
Clik here to view.
型定義ジャンプ.gif

おわりに

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

備考


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


Viewing all articles
Browse latest Browse all 5712

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>