🗒️

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