3月26日、ついにneovim 0.11 が来ました。このリリースでは LSP関連機能が大幅に強化されました。 これで、いよいよプラグインなしで本格的に使えるようになりました。

今回はネイティブAPIだけでどこまでできるようになったのか紹介します。

0.11 で追加されたLSP関連の機能はこちらです。

まだまだあるので、詳しくはリリースノートをご覧ください。 News-0.11

これらのAPIのおかげで、language server自体のインストール以外はほぼなんでもできるようになりました。

まずは0.11までほぼ必須だったLSPプラグインたちをおさらいしていきます。知っていたら次の章まで飛ばしてよいです。

  • nvim-lspconfig: コンフィグ集。0.11以前はlanguage serverのセットアップも担当していた。
  • mason: エディタツールを管理するパッケージマネージャーのプラグイン。language serverのインストールを担当する。linterやformatterもまとめて管理できる。
  • mason-lspconfig: nvim-lspconfig の設定を利用してlanguage serverの起動、セットアップをするプラグイン。masonを介したlanguage serverの自動インストール機能もある。

0.11以前でlanguage serverの自動インストールとセットアップをする設定はこのようになります。


require 'mason'.setup()


local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
  automatic_installation = true,
  ensure_installed = {'ts_ls', 'lua_ls'}, 
}


local lspconfig = require 'lspconfig'
mason_lspconfig.setup_handlers {
  function(server_name)
    lspconfig[server_name].setup {}
  end,
  
  lua_ls = function()
    lspconfig.lua_ls.setup {
      settings = {
        Lua = {
          diagnostics = {
            globals = { 'vim' }
          },
        }
      },
    }
  end
}

同じことをする0.11以降の設定はこちらです。なお、nvim-lspconfigはこのPRのものを使う必要があります。


require 'mason'.setup()


local ensure_installed = {'ts_ls', 'lua_ls'}
require 'mason-lspconfig'.setup {
  automatic_installation = true,
  ensure_installed = ensure_installed, 
}


vim.lsp.config('lua_ls', {
  
  settings = {
    Lua = {
      diagnostics = {
        globals = { 'vim' }
      },
    }
  },
})
vim.lsp.enable(ensure_installed)

違うのは最後のlanguage serverを設定する部分です。nvim-lspconfigはコンフィグ集としてだけ使われるようになり、 neovimのAPIだけで設定できるようになりました。

このように、masonを使ったlanguage serverのインストール以外は ほとんどneovimのAPIだけで完結するようになりました。

0.11では LSPを使った補完もできるようになりました。 オムニ補完()だけでなく、キー入力中の補完も使えます。 autotriggerをtrueに設定するだけで出来ます。

vim.cmd[[set completeopt+=menuone,noselect,popup]]
vim.lsp.start({
  name = 'ts_ls',
  cmd =,
  on_attach = function(client, bufnr)
    vim.lsp.completion.enable(true, client.id, bufnr, {
      autotrigger = true, 
      convert = function(item)
        return { abbr = item.label:gsub('%b()', '') }
      end,
    })
  end,
})

参考: Lua module: vim.lsp.completion

autotriggerを有効にすると、挿入モード中にLSPを使った補完が出てきます。

結構ちゃんと動くので、補完系プラグインも無くしてもよいかもしれません。

0.11で入った機能により、実に様々なことができるようになりました。

  • language serverのコンフィグを設定する
  • language serverを自動的に起動させる
  • LSPを使った自動補完を使う

language serverのインストールには対応してないので、まだmasonはあったほうが便利です。しかし、nvim-lspconfigはほぼコンフィグ集として使えるようになりました。かなり嬉しいですね。

不要になったプラグインも増えたので、この機会にdotfilesを見直してみてはいかがでしょうか。

フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link