💭
NeovimのBuiltinのLSPクライアントを使う
Neovimに入っているLSPクライアントを使ってみます。
>>> nvim --version
NVIM v0.5.0-dev+nightly
プラグイン管理にvim-plugを使っています。
設定集のインストール
nvim-lspconfig
LSの設定集です。
インストール済みのLSを勝手に起動してくれます。
Plug 'neovim/nvim-lspconfig'
自動補完
omnifuncを使うか、プラグインを導入する必要があります。
BuiltinのLSPクライアント用にLuaで書かれた自動補完のプラグインを使います。
completion-nvim
Plug 'nvim-lua/completion-nvim'
そのままだと上のほうにバッファが出たりして少し煩わしいので推奨設定をそのまま書きます。
set completeopt=menuone,noinsert,noselect
set shortmess+=c
設定
Luaで書くみたいです。
例にならってヒアドキュメントで書いていくのですが、そのままだと色がつかないのでシンタックスハイライトされるように設定します。
let g:vimsyn_embed='lPr'
個人的最小限設定です。
lua << EOF
local on_attach = function (client, bufnr)
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', {noremap = true, silent = true})
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', {noremap = true, silent = true})
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', {noremap = true, silent = true})
require('completion').on_attach(client)
end
require('lspconfig').vimls.setup({on_attach = on_attach})
require('lspconfig').tsserver.setup({on_attach = on_attach})
require('lspconfig').intelephense.setup({on_attach = on_attach})
EOF
エラー表示が気になる
エラーやヒントはvirtual textで行末に表示されます。
- 画面分割したときに見切れる場合が多い
- 大量に表示されるとつらい
virtual textで表示しない設定
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = false }
)
エラーメッセージはvim.lsp.diagnostic.show_line_diagnostics()
で見れます。
色をつける
:help lsp-highlight
使っているテーマが対応していなかったので、エラーとヒントの印だけ色をつけてみます。
highlight LspDiagnosticsSignError ctermbg=9 ctermfg=15
highlight LspDiagnosticsSignHint ctermbg=142 ctermfg=15
使える
私がLSP関連を使いこなせていないせいかもしれないですが、普通に使えそうな印象です。
(いままではcoc.nvim使っていました)。
Discussion