2024/03/20
LunarVimでtsserverとdeno_lsを切り替える方法
lvimで動的にLS(言語サーバー)を切り替える方法を紹介します。
LunarVimのLSP設定方法
LunarVimには、デフォルトでLSPの設定がされており、LSを変えるにはドキュメントに書いてあります。
https://www.lunarvim.org/docs/configuration/language-features/language-servers
Use
jedi_language_serverinstead ofpyright-- add `pyright` to `skipped_servers` list vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "pyright" }) -- remove `jedi_language_server` from `skipped_servers` list lvim.lsp.automatic_configuration.skipped_servers = vim.tbl_filter(function(server) return server ~= "jedi_language_server" end, lvim.lsp.automatic_configuration.skipped_servers)
skipped_serversに追加することで、その言語サーバーを無効にすることができます。
jedi_language_serverをskipped_serversから排除することで、有効にすることができます。
しかし、この方法で適用するには設定を変更する度に:LvimCacheResetを実行する必要があります。
代替方法
LunarVimで、元々適用されてないLSPを追加するには、以下のようにします。
local lspconfig = require('lvim.lsp.manager')
lspconfig.setup('emmet_ls', {
filetypes = {
'typescript',
},
})これはemmet_lsをtypescriptファイルに適用する例です。
この2個の方法を組み合わせることで、実現できます。
tsserverとdeno_lsを切り替える
プロジェクトルートにpackage.jsonが存在する場合はtsserverを使い、
存在しない場合はdeno_lsを使うという設定をします。
local additional_servers = {
'tsserver',
}
local server_list = vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, additional_servers)
lvim.lsp.automatic_configuration.skipped_servers = server_list
local function is_packagejson_present()
if vim.fn.filereadable('package.json') == 1 then
return true
end
return false
end
if is_packagejson_present() then
lspconfig.setup('tsserver')
else
lspconfig.setup('denols')
end注意点としては、プロジェクトルートでlvimを開かないと
package.jsonが認識されないのでdeno_lsが使われます。
また、この方法でも設定後一度だけ:LvimCacheResetを実行する必要があるので忘れずに。
最後に
LunarVimっていいですよね。
ではまた。
最終更新日:2026/01/20