忙しい人向け nvim-lspconfigのnvim v0.11対応
はじめに
Neovim v0.11でLSP周りに大きな変更が加わりました。
- runtimepath内のlspフォルダにLanguage Serverの設定ファイルを置けるようになった
-
vim.lsp.configで設定を上書きできるようになった -
vim.lsp.enableでLanguage Serverを有効化できるようになった
これまではnvim-lspconfigの各Language Serverのsetup関数で実現していましたが、Neovim本体の機能で設定と有効化が可能になりました。
さらに、nvim-lspconfigはsetup関数の更新を凍結したため、いずれ新方式で書き換える必要があります。
急いでいない方は以下の記事を参考に設定してください。
急いで書き換える
共通の設定を書き換える
全てのLanguage Serverに共通の設定は以下のように記載できます。
vim.lsp.config('*', {
-- 共通設定
})
nvim-cmpのcapabilitiesを設定する場合は以下のように記載します。
vim.lsp.config('*', {
capabilities = require('cmp_nvim_lsp').default_capabilities(),
})
これで各Language Serverのsetupでcapabilitiesを設定する必要がなくなりました。
各Language Serverの設定を書き換える
以下のようなsetupを書き換えます。
language_server_nameの部分はlua_lsやrust_analyzerなどに適宜読み替えてください。
require('lspconfig').language_server_name.setup {
settings = {
awesome_setting = 'awesome',
},
}
setup関数の引数を返却するファイルを作成します。場所は.config/nvim/after/lsp/language_server_name.luaです。
---@type vim.lsp.Config
return {
settings = {
awesome_setting = 'awesome',
},
}
忘れずにvim.lsp.enableを実行してください。
vim.lsp.enable('language_server_name')
mason-lspconfigのsetup_handlersで有効化していたLanguage Serverの書き換え(2025年5月7日更新)
mason-lspconfigのv2.0.0ではsetup_handlersが廃止されました。
その代わり、MasonでインストールしたLanguage Serverが自動的に有効化されるようになりました。
そのため、設定部分だけをこれまでの内容に従って書き換えれば動作します。
有効化の詳細については以下をご確認ください(この記事の更新時点でのリンクです。必要に応じて最新版をご確認ください)。
mason-lspconfig v1の場合(更新前の内容)。
mason-lspconfigのsetup_handlers関数で設定していた場合、設定部分はこれまでの記載内容で書き換えることが可能です。
あとは有効化ができれば書き換え完了です。
vim.lsp.enableはtableを受け取ることができるため、以下を追記してください。
vim.lsp.enable(require('mason-lspconfig').get_installed_servers())
lazydev.nvimを使っているけど移行しても大丈夫か
大丈夫。
nodeとdenoを自動で切り分けて起動したい
冒頭で紹介したkawarimidollさんの記事を参考に、自動で切り分けてください。
もしくは.nvim.luaでプロジェクトごとに設定するのも良いでしょう。
.nvim.luaについては:h exrcでヘルプを参照してください。
Neovim v0.11.1の場合(2025年4月28日追記)
Neovim v0.11.1からworkspace_requiredという項目が追加されました。
workspace_requiredを使用することで、package.jsonやdeno.jsonが存在する場合のみ起動するように設定でき、自動的な切り分けが可能になります。
---@type vim.lsp.Config
return {
root_markers = {
'package.json',
},
workspace_required = true,
}
---@type vim.lsp.Config
return {
root_markers = {
'deno.json',
'deno.jsonc',
'deps.ts',
},
workspace_required = true,
}
おわり
書き換える前は新しく何かができるわけでもないので非常に億劫でした。
しかし、これまで密結合だったLSP関連のリポジトリの役割が明確になり、素晴らしい変更だと感じています。
- Neovim本体でプラグインなしでもLSPサポート
- lspconfigは各種Language Serverの共通設定(実行ファイル名やファイルタイプなど)
- masonはLanguage Serverなどのツールをインストールしてパスを通す
- mason-language-serverはmasonでインストールするLanguage Serverのためのツール群
新たな入門記事が待たれます。
Discussion