Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

NeovimのBuiltin LSPを使ってみる

$
0
0

はじめに

最近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>)のオムニ補完です。
実行と同時に新しいバッファが開きますが、なにも表示されずよくわかりません。
補完.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.definitionvim.lsp.buf.type_definition()
型定義ジャンプ.gif

おわりに

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

備考


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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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