Neovimのdiagnosticの設定を見直す
Neovim docsのDeprecated(:h deprecated
)を見ていたらvim.diagnostic.config
を使っていろいろ設定できることを把握。
せっかくの機会なのでNeovimのDiagnosticの設定を見直すことにしました。
virtual_textのformat
筆者は、お怒りになっている方・理由を知るためにdiagnosticのformatを変更しています。

このルールだけはオフにしておきたいな、というときに怒られ元が分かると便利なんです。textlintとか。
このformatの変更について、LSP・none-ls.nvimの2つに分けて紹介します。
LSPの怒られ
以前書いた記事の時点ではハンドラを書き換えていましたが、vim.diagnostic.config
で書けるようです。
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = { format = function(diagnostic) return string.format("%s (%s: %s)", diagnostic.message, diagnostic.source, diagnostic.code) end, },})
format
の関数の中身はそのままです。
vim.diagnostic.config({ virtual_text = { format = function(diagnostic) return string.format("%s (%s: %s)", diagnostic.message, diagnostic.source, diagnostic.code) end, },})
これについては当時の調査不足なのか、普通に後から書けるようになったのか、当時は何らかの理由でvim.lsp.handler
を使う必要があったのか、正直分かりません。
none-ls.nvimの怒られ
none-lsについても触れます。
none-lsで扱うものはLSPではないため、vim.lsp.handlers
を使っていたころはdiagnostics_format
の設定が別途必要でした。
local null_ls = require("null-ls")null_ls.setup({ diagnostics_format = "#{m} (#{s}: #{c})", -- 省略})
しかし、vim.diagnostic.config
を使うことでformatの指定がLSPではないnone-lsにも設定できるようになりました。diagnostics_format
を使うと二重に表示されてしまうことになるため、消します。
local null_ls = require("null-ls")null_ls.setup({ diagnostics_format = "#{m} (#{s}: #{c})", -- 省略})
update_in_insert
挿入モードのときにdiagnosticを更新させないupdate_in_insert
をfalse
に設定していました。
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { update_in_insert = false,})
こちらもvim.diagnostic.config
で設定できるようになった!と思い設定しましたが……。
vim.diagnostic.config({ update_in_insert = false, -- その他の設定})
ドキュメントをよく読んだところ、デフォルトがfalse
だったので設定しなくて良かったようです。
vim.diagnostic.config({ update_in_insert = false, -- その他の設定})
sign_defineからvim.diagnostic.configへ
バージョン0.10から、:sign-define
とsign_define()
がDeprecated(非推奨)になるようです。
vim.fn.sign_define("DiagnosticSignError", { text = "", texthl = "DiagnosticSignError" })vim.fn.sign_define("DiagnosticSignWarn", { text = "", texthl = "DiagnosticSignWarn" })vim.fn.sign_define("DiagnosticSignInfo", { text = "", texthl = "DiagnosticSignInfo" })vim.fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" })
vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = "", [vim.diagnostic.severity.WARN] = "", [vim.diagnostic.severity.INFO] = "", [vim.diagnostic.severity.HINT] = "", }, },})
ちなみに筆者はNeovimの更新をサボってv0.9.4であるため、まだ試しておらずコメントアウトにしています。
Code Actionのプラグインを見直す
ついでにLSP関連のプラグインも見直しました。nvim-code-action-menuがアーカイブされていたようです。
Code Actionのアクションを適用したらどうなるのかプレビューで表示してくれて便利だったのでした。
代わりとして、actions-preview.nvimを使うことにしました。

Nerd Fonts
LSPもろもろの設定をしているとたまにNerd Fonts
のアイコンを検索したくなるのでNerd Fontsのチートシートを張っておきます。

ついでによく使いそうな検索ワードも載せておきます。
内容 | 検索ワード |
---|---|
バツ印 | remove 、x |
警告 | warn |
i マーク | info |
電球 | lightbulb 、bulb |
虫眼鏡マーク | magnify |
虫マーク | bug |
バッテリー | battery |
以上、NeovimのDiagnosticとCode Actionの見直しでした。