🚗

NeovimのDiagnosticのfloating windowの中に入る

2025/01/03に公開

はじめに

NeovimのDiagnosticはLanguage Serverの診断情報等を表示してくれる機能です。
none-lsnvim-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の中に入った時の様子です。

foating 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で調べる事ができます。

私は記事執筆時点で以下の設定をしています。

init.lua
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,
  },
}

↑の設定で表示は↓となります。

設定させていただきありがとうございます

GitHubで編集を提案

Discussion