💭

NeovimのBuiltinのLSPクライアントを使う

2021/01/14に公開

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