nvim-lspconfig は、NeoVim で LSP を使うための設定を簡単にしてくれる頼もしいやつです。
README には推奨設定が記載されていて親切ですが、キーマッピングが多すぎてよくわからないという人もいるかもしれません。
そこでこの記事では、nvim-lspconfig のキーマッピングのうち、筆者が独断と偏見で選んだ機能をスクショを交えながら紹介したいと思います。
2022年6月16日現在、nvim-lspconfig で必要な NeoVim のバージョンは 0.7 になっているので、お使いのバージョンをご確認の上 0.7 未満の方は上げておいてください。
Homebrew を使ってインストールしている場合は下記のコマンドでバージョンアップできます。
brew upgrade neovim
公式の推奨設定はリポジトリの Suggested configuration に記載されています。
そのうち、筆者のおすすめはキーマッピングは下記です。
-- Mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<space>f', vim.lsp.buf.formatting, bufopts)
end
上から順に紹介していきたいと思います。
設定ファイル全体は下記からご覧ください。
Diagnostic は、LSP サーバーなど外部システムから受け取った警告やエラーメッセージを表示する機能です。
メッセージは行末に表示されますが、1行の文字数が多かったり、ウィンドウを分割していたりすると画像のように見切れて全文が読めないということが起こります。
![Image in a image block](/_astro/71e852e9-83fc-4c09-9afe-7aae1c68027b.C5cAQJxS_ZsFmgf.webp)
そこで、警告のある行でキーマッピングに設定した <space>e
を入力するとメッセージがフロートで表示されます。
これなら見切れずに読むことができます。
![Image in a image block](/_astro/2c29a34a-6b8b-4701-a83c-e22ca5b1313a.kwI5cpr2_1Q6m3S.webp)
また、]d
で次の診断へ、 [d
で前の診断へ移動できます。警告のある箇所を素早く移動できるので、デバッグのときに重宝しますね。
プログラムを書いているとき、「このメソッドの引数と戻り値はなんだっけ?」となることがあると思います。
そんなときにはメソッドにカーソルを合わせて、キーマッピングに設定した K
を入力するとヒントを見ることができます。
定義されている箇所をわざわざ見に行かなくて良いので便利ですね。
![Image in a image block](/_astro/fa6f64ec-5508-42ac-a74e-b6d7b9892a5d.DgPznlIj_Z16LjWO.webp)
メソッドの引数と戻り値を hover で調べても、実装がどうなっているか読みたいときがあります。
そんなときはキーマッピングに設定した定義ジャンプ gd
と実装ジャンプ gi
を使います。
![Image in a image block](/_astro/229fbdce-a885-4f9b-b6ad-a11570facfdd.BU7XPNWx_KGhEq.webp)
![Image in a image block](/_astro/f2b22fb1-21e1-4012-8296-bc7b6116bf3a.9smlo-Kl_289jAY.webp)
定義ジャンプと実装ジャンプを区別して使う必要があるのは、インターフェースを使っているケースでしょう。
インターフェースを使っていない場合は、両者とも定義箇所にジャンプするので、特に気にする必要はなさそうです。
ジャンプすると現在のバッファが切り替わってしまうので、後述の「おまけ: バッファ移動」のキーマッピングも合わせて設定してみてください。
メソッドやクラス、型やインターフェースがどこから参照(リファレンス)されているか調べたいケースもよくあると思います。
そんなときはキーマッピングに設定した gr
を入力すると、参照箇所が一覧で表示されます。
![Image in a image block](/_astro/9d295e29-2cb6-4277-a961-9250b726c60a.D4HHgo6Q_Z1Ee0y8.webp)
カーソルを合わせて決定するとジャンプすることができます。
インデントのずれやスペースの漏れなど、プログラミングにおいて本質的でない問題はツールに任せてしまいましょう。
<space>f
を入力するだけで自動でフォーマットしてくれます。
![Image in a image block](/_astro/3e8678ee-5302-4f08-8ef6-a523f2421d76.BGbuL08f_lH53R.webp)
![Image in a image block](/_astro/94d05e9b-8219-4ad0-bebe-97bd002a90bf.BHZMy1-t_Z2gmbya.webp)
下記のキーマッピングを登録しておくとバッファの一覧と移動が素早くできるのでおすすめです。
わかりにくいですが :buf
の後ろにスペースが入っています。
map <C-H> :ls<CR>:buf
使い方は Ctrl+H
を入力して移動したいバッファの番号を入力するだけです(キー割り当てはお好みで変更してください)。
![Image in a image block](/_astro/e3ae4962-2deb-49c8-8965-924d02ceadab.DrzPVLnd_ZiIxxv.webp)
このキーマッピングはブログ記事 vimのバッファ操作 で知ったものです。
また、1つ前や次のバッファに移動するキーマッピングもおすすめです。
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
定義ジャンプを画面分割で開くためには次のようにします。
vim.keymap.set('n', 'gd<Space>', ':split | lua vim.lsp.buf.definition()<CR>', bufopts)
vim.keymap.set('n', 'gd<CR>', ':vsplit | lua vim.lsp.buf.definition()<CR>', bufopts)
以上です。
この記事では、nvim-lspconfig のキーマッピングのうち、筆者が独断と偏見で選んだ機能をスクショを交えながら紹介しました。
皆さま良いプログラミングライフを!
コメントを送る
コメントはブログオーナーのみ閲覧できます