coc.nvim
を使うのがベストな選択肢でしたが、neovim builtin lsp(以下 nvim-lsp)でもかなりエコシステムが整備されており、VSCode 並の開発体験が得られるようになっています。この記事ではそんな nvim-lsp の設定の基本的なところを説明します。:checkhealth mason
で指定されたコマンドが必要となることがあります。package.json
がある場合は Typescript の言語サーバーが起動してほしいなど)はそれぞれ違うのでこのプラグインが必要になります。local on_attach
で始まる行では、LSPサーバーがアタッチ(つまりvimのバッファと紐付けられて起動)した際に実行される処理を記述しています。この中ではLSPサーバーに関係するキーマップを設定することが多いです。この設定例ではK
で「ホバー」、gd
で「定義へ移動」などを設定しています。もちろん自分が使いやすいように自由に変更することができます。mason.nvim
でインストールした言語サーバが自動的に起動するように設定しています。init.lua
を書いて neovim を起動してみましょう。すると、lazy.nvimが自動でプラグインをインストールしてくれるはずです。mason.nvim
により:LspInstall [server name]
というコマンドが使えるようになっています。:Mason
コマンドを使うことで下図のようにインタラクティブなサーバーインストール画面を使うこともできます。:LspInstall lua_ls
を実行してLuaの言語サーバをインストールしてみましょう。コマンド実行後にインストール画面が表示され、しばらくすればインストールが完了します。init.lua
を開くと自動で言語サーバが起動するはずです。LSPによる診断が表示され、上でも説明したようにK
でホバーを出すこともできます。:h lsp
に詳細な情報が載っているので読んでみると良いでしょう。cmp-nvim-lsp
が分離されているため、両方インストールします。LSP 以外にも様々な補完ソースが開発されており、cmp-buffer
を入れています。nvim-cmp
以外にもnvim-lspで仕様できる補完プラグインがあるのでご紹介します。GitHub - Shougo/ddc.vim: Dark deno-powered completion framework for neovim/Vim
github.com
GitHub - ms-jpq/coq_nvim: Fast as FUCK nvim completion. SQLite, concurrent scheduler, hundreds of hours of optimization.
github.com
none-ls
はLua製の外部依存がないNeovimプラグインであることなどが利点です。prettier
がインストールされていればそちらが、インストールされてなければグローバルのものが使用されます。:terminal
の中でも mason でインストールしたものはパスが通っており、実行することができます。deno fmt
を使います。さらにdeno
の設定ファイルがあれば null-ls 経由のdeno fmt
ではなく deno LSP の組み込みフォーマットを使います。prettier
と同様にeslint
も none-ls で使用できますが、すごく重いのでeslint-lsp
を使うことをお勧めします。mason.nvim からインストールできます。Neovimプラグインをまともに選定できるリストを作った
zenn.dev
GitHub - ray-x/lsp_signature.nvim: LSP signature hint as you type
github.com
GitHub - onsails/lspkind.nvim: vscode-like pictograms for neovim lsp completion items
github.com
GitHub - j-hui/fidget.nvim: 💫 Extensible UI for Neovim notifications and LSP progress messages.
github.com
GitHub - folke/noice.nvim: 💥 Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu.
github.com
experimental/externalDocs
(docs.rs を開く機能)のように、言語サーバはそれぞれ LSP の標準にはない独自の仕様を定義していることがあります。GitHub - jose-elias-alvarez/typescript.nvim: A Lua plugin, written in TypeScript, to write TypeScript (Lua optional).
github.com
GitHub - simrat39/rust-tools.nvim: Tools for better development in rust using neovim's builtin lsp
github.com
GitHub - ray-x/go.nvim: A feature-rich Go development plugin, leveraging gopls, treesitter AST, Dap, and various Go tools to enhance the dev experience.
github.com
GitHub - mfussenegger/nvim-jdtls: Extensions for the built-in LSP support in Neovim for eclipse.jdt.ls
github.com
GitHub - akinsho/flutter-tools.nvim: Tools to help create flutter apps in neovim using the native lsp
github.com
Lsp - Neovim docsNeovim
neovim.io
Blocked
www.reddit.com
nvim
とか検索すればたくさんでてきます)。参考になる設定が沢山あるので詰まったりしたら見てみるとよいでしょう。Neovim Mine
neovim-mine.vercel.app
zenn/examples/c2f16b07798bab/init.lua at main · nazo6/zenn
github.com
GitHub - nazo6/nvim
github.com