Neovim v0.11がリリースしたのでLSP周辺の設定を見直した

Neovim v0.11がリリースしたのでLSP周辺の設定を見直した

Neovimがv0.11をリリースした

2025年3月27日、遂にNeovimのバージョン 0.11 がリリースされた。パチパチパチパチ

結構たくさん変更点があった。詳しくは公式のリリースノートを確認するとして今回はLSP周辺の設定を見直そうと思う。

これまでは nvim-lspconfig に依存していた

直近まで利用していた v0.10.4 まで nvim-lspconfig を利用していた。 しかし、 v0.11 から新しく vim.lsp.config なるものが追加されたみたい。 これを利用することで nvim-lspconfig よりもシンプルに実装出来るようだ。

ちょっと前に、私も coc.nvim から移行したばかりだった。

{{ card(title=“coc.nvimからnvim-lspconfigへ移行した”, url=“https://dnfolio.me/coc-nvimkaranvim-lspconfigheyi-xing-sita/”) }}

本体とプラグインで同等の機能が実装され、本体の方がシンプルに実装出来るということであれば是非触ってみたい、という気持ちで今回手を動かし始めた。

以降は、公式でもリンクされているこちらの投稿を参考に実装を進めた。 LSPの機能が本体に取り込まれるまでの経緯から実装例まで分かりやすくまとめられている。

{{ card(title=“What’s New in Neovim 0.11”, url=“https://gpanders.com/blog/whats-new-in-neovim-0-11/”) }}

実装

nvim/lsp ディレクトリに言語サーバー毎の設定を書く方法もあるらしいが、今回は元々LSPの設定を書いていた nvim/lua/daiki/lsp.lua に追加した。 つまり nvim/init.lua に直接書いている。

vim.lsp.config["lua-language-server"] = {
  cmd = { "lua-language-server" },
  filetypes = { "lua" },
  root_markers = { ".luarc.json" },
  settings = {
    Lua = {
      runtime = {
        version = "LuaJIT",
      },
      diagnostics = {
        globals = { "vim" },
      },
    },
  },
}
vim.lsp.enable("lua-language-server")

lua-language-server はインストール済みとする。

確認

適当なLuaファイルをNeovimで開いて :checkhealth lsp コマンドを実行する。

==============================================================================
vim.lsp:                                     require("vim.lsp.health").check()

- LSP log level : WARN
- Log path: /home/daiki48/.local/state/nvim/lsp.log
- Log size: 66 KB

vim.lsp: Active Clients ~
- lua-language-server (id: 1)
  - Version: 3.13.9
  - Root directory: nil
  - Command: { "lua-language-server" }
  - Settings: {
      Lua = {
        diagnostics = {
          globals = { "vim" }
        },
        runtime = {
          version = "LuaJIT"
        }
      }
    }
  - Attached buffers: 6

vim.lsp: Enabled Configurations ~
- lua-language-server:
  - cmd: { "lua-language-server" }
  - filetypes: lua
  - root_markers: .luarc.json
  - settings: {
      Lua = {
        diagnostics = {
          globals = { "vim" }
        },
        runtime = {
          version = "LuaJIT"
        }
      }
    }


vim.lsp: File Watcher ~
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients

vim.lsp: Position Encodings ~
- No buffers contain mixed position encodings

EnabledだしActiveであることが確認出来た。完了!

補完も自分で実装してみようかと思ったが挙動に満足出来なかった。もっと深い知識を得てから挑戦したい。 ということで、継続して blink.cmp を利用する。最近 v1 リリースしてた。パチパチパチパチ

{{ card(title=“v1.0.0 | blink.cmp GitHub”, url=“https://github.com/Saghen/blink.cmp/releases/tag/v1.0.0”) }}

おわりに

なんかどんどん自分のdotfilesがスリムになっている。 なるべく依存するプラグインは減らしたい人間なので、自動補完も自前で用意したいなぁ。