🗒️
neovim lsp, masonを使った自分の設定例
neovim lspの設定
lazyで読み込むプラグインの設定ファイルの一部
plugins.lua
return {
-- ...
{
"williamboman/mason.nvim",
requires = {
"williamboman/mason-lspconfig.nvim",
"hrsh7th/cmp-nvim-lsp",
},
config = function()
require("mason").setup()
end,
},
{
"williamboman/mason-lspconfig.nvim",
config = function()
require("config/mason-lspconfig")
end,
},
-- ...
}
mason-lspconfigでの設定
- ensure_installedでmasonでインストールできるlspの名前を指定している。
- setup_handlersで各言語サーバーごとに呼び出されるので、configをそこで言語ごとに設定している。
-- rust言語サーバーの設定
local function setup_rust(config)
config.on_attach = function(client, bufnr)
if client.server_capabilities.documentFormattingProvider then
-- formatterのキーマップ設定
vim.api.nvim_buf_set_keymap(
bufnr,
"n",
"<leader>f",
":lua vim.lsp.buf.format({ async = true })<CR>",
{ noremap = true, silent = true }
)
end
end
end
-- 言語サーバーごとの個別設定
local server_configs = {
rust_analyzer = setup_rust,
}
local function setup_default(config)
-- デフォルトの設定を追加
end
require("mason-lspconfig").setup_handlers({
function(server_name)
local config = {
capabilities = require("cmp_nvim_lsp").default_capabilities(),
}
-- 言語サーバーごとの設定関数を呼び出す
if server_configs[server_name] then
server_configs[server_name](config)
else
setup_default(config)
end
require("lspconfig")[server_name].setup(config)
end,
})
require("mason-lspconfig").setup({
ensure_installed = { "rust_analyzer", "lua_ls", "ts_ls", "cssls", "jdtls" }, -- 必要なLSPサーバーを指定
})
Discussion