NeovimのDiagnosticのfloating windowの中に入る
はじめに
NeovimのDiagnosticはLanguage Serverの診断情報等を表示してくれる機能です。
none-lsやnvim-lintを使ってlinterの結果を表示している人も多いでしょう。
そんな人達向けのTipsを紹介します。
この記事のスクリーンショットはNeovim v0.10.2です。
Neovim v0.10.3でも同様に使える事を確認しています。
入り方
vim.diagnostic.open_float
関数を実行すると診断結果をfloating windowで表示できます。
デフォルトでは<C-w>d
にマッピングされています。
このfloating window表示中にもう一度<C-w>d
を押すとfloating windowの中に入ることができます。
q
でfloating windowをcloseできます。
(<C-w><C-w>
などのwindow移動コマンドで脱出しても自動でcloseします)
以上です。
応用
以下がfloating windowの中に入った時の様子です。
この時、vi[
を押すとどうなるでしょうか。
こうなります。
i[
は[]
の中を示すテキストオブジェクトなので、診断コードを選択できます。
たとえばtextlintでこのルールを無効化する場合、以下の記載が必要です。
<!-- textlint-disable ja-technical-writing/no-exclamation-question-mark -->
長い。
長いですが、無効化するルールについてはfloating windowの中に入ってyi[
でコピーできるので、簡単に記載することが出来ます。
Code Actionで無効化できると楽ですが、Code Actionが提供されていない場合も便利に無効化できます。
またopen-browser.vimと組み合わせることで、診断コードをwebで検索可能です。
診断コードに対する修正方法を検索できて便利です。
おまけ
Diagnosticのfloating windowの表示をカスタマイズする
vim.diagnostic.config()
を使って表示方法をカスタマイズできます。
設定可能な項目は:h vim.diagnostic.Opts
で調べる事ができます。
私は記事執筆時点で以下の設定をしています。
vim.diagnostic.config {
severity_sort = true,
float = {
border = 'single',
title = 'Diagnostics',
header = {},
suffix = {},
format = function(diag)
if diag.code then
return string.format('[%s](%s): %s', diag.source, diag.code, diag.message)
else
return string.format('[%s]: %s', diag.source, diag.message)
end
end,
},
}
↑の設定で表示は↓となります。
Discussion