Wagomu no Akibako

Neovim+LSPをなるべく簡単な設定で構築する ~ Lazy.nvim編 ~


この​記事はVim駅伝2023年05月17日の​記事です。

はじめに

現在、​私は​Neovimの​設定ファイルを​吹き飛ばして​一から​プラグインの​選定、​設定を​行っています。​そして​LSP周りの​プラグインの​選定や​設定を​探していた​ところ​このような​記事を​見つけました。

全く​短く​する​必要性は​ありませんが、lazy.nvimを​使用する​ことで​プラグインマネージャーの​導入から、​実際に​補完が​動作するまでを​もう​すこし短い​コードで​書けるのではないかと​思いこの​記事を​書く​ことにしました。

変更点と​しては​プラグインマネージャーがpacker.nvim-> lazy.nvimに、​補完プラグインがnvim-cmp-> mini.completionに​なっています。

変数情報の​表示

変数情報の表示

エラー検出

変数情報の表示

変数ハイライト

なし

補完

補完

NVIM v0.10.0

Windows 11

-- init.lua

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable",
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup( {
  {
    "williamboman/mason.nvim",
    build = ":MasonUpdate",
    opts = {},
  },
  {
    "williamboman/mason-lspconfig.nvim",
    dependencies = {
      { "williamboman/mason.nvim" },
      { "neovim/nvim-lspconfig" },
      { "echasnovski/mini.completion", version = false },
    },
    config = function()
      local lspconfig = require("lspconfig")
      require('mini.completion').setup({})
      require("mason-lspconfig").setup_handlers({
        function(server_name)
          lspconfig[server_name].setup(opts)
        end,
        ["vtsls"] = function()
          lspconfig["vtsls"].setup({})
        end,
      })

      vim.api.nvim_create_autocmd("LspAttach", {
        callback = function(_)
          vim.keymap.set('n', 'K',  '<cmd>lua vim.lsp.buf.hover()<CR>')
          vim.keymap.set('n', 'gf', '<cmd>lua vim.lsp.buf.formatting()<CR>')
          vim.keymap.set('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>')
          vim.keymap.set('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>')
          vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>')
          vim.keymap.set('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>')
          vim.keymap.set('n', 'gt', '<cmd>lua vim.lsp.buf.type_definition()<CR>')
          vim.keymap.set('n', 'gn', '<cmd>lua vim.lsp.buf.rename()<CR>')
          vim.keymap.set('n', 'ga', '<cmd>lua vim.lsp.buf.code_action()<CR>')
          vim.keymap.set('n', 'ge', '<cmd>lua vim.diagnostic.open_float()<CR>')
          vim.keymap.set('n', 'g]', '<cmd>lua vim.diagnostic.goto_next()<CR>')
          vim.keymap.set('n', 'g[', '<cmd>lua vim.diagnostic.goto_prev()<CR>')
        end
      })

      vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
      vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = false }
      )
    end
  }
})

おわりに

短い​行数で​動いて​満足です。

ちなみに、​自分は​nvim-cmpを​使います。