Coc.nvimを触ってみようアドベントカレンダー 5日目 – coc-spell-checker

とっても楽しいcoc.nvimを触ってみようというアドベントカレンダーです。5日目はcoc-spell-checker。編集中のスペルチェックに役立つプラグイン。独自辞書も利用可能です。
2021.12.05

Coc.nvimを触ってみよう Advent Calendar 2021 5日目です。

今回は coc-spell-checker です。

coc-spell-checker について

cspellのcoc.nvimラッパーで、vimで編集中に自動でスペルチェックを実行してくれます。.vim フォルダ内に cspell.json がある場合はそれを優先するため、既存のcspell設定を流用する際に手間いらずです。

coc-spell-checker をインストールする

vimを起動した状態で以下のコマンドを実行します。

:CocInstall coc-spell-checker

使ってみる

ファイルを開くと、以下のようにスペルミスの疑いのある単語がピックアップされます。

これらを直していくわけですが、スペルミスではない独自用語も含まれることがあり、チェックから除外したい単語の取り扱いが肝になってきます。

単語集のようなテキストファイルがある場合は、coc-settings.jsonにて以下のように指定しておきます。

  "cSpell.dictionaryDefinitions": [
      { "name": "nvim", "path": "/Users/path/to/.dictionary/nvim.txt"}
  ],
  "cSpell.dictionaries": [
    "nvim"
  ]

pathで指定しているnvim.txt内に単語を入れることで、チェックから除外が可能になります。

単語集の反映確認

万が一、単語を追加したのにチェックされていなさそう、等の問題に突き当たった場合は以下の手順にて単語集の認識、及び単語がチェックの対象となっているか確認します。

まず、作業ディレクトリ内に.vimフォルダを作成し、その中に以下の内容でcSpell.jsonを追加します。

{
  "version": "0.2",
  "language": "en",
  "languageSettings": [
    {
      "languageId": "*",
      "locale": "*",
      "dictionaries": ["devio"],
      "dictionaryDefinitions": [
        {
          "name": "devio",
          "path": "/path/to/.vim/dictionaries/nvim.txt"
        }
      ]
    }
  ]
}

この時の dictionaryDefinitions.[].path については .vim 以下であれば、フルパスでもcSpell.jsonの相対パスのどちらでも構いません。パス先に今回はnvim.txtを追加し、nvim.txt内に適当な単語を入れます。

echo 'hatenablogcard' > /path/to/.vim/dictionaries/nvim.txt

次に以下のコマンドにてチェックを入れます。

cspell trace hatenablogcard -c .vim/cSpell.json

出力結果が以下のようになっていれば単語集内で判定がなされていることになります。

なお、coc-settings.jsonをcspellの -c に引数として渡しても判定対象とはなりません。

文書編集中に単語を除外フレーズに追加する

編集中に引っかかった単語を一時的にでも外したい場合は、ビジュアルモードにて該当単語を選択状態にした上で CocCommand cSpell.addWordToWorkspaceDictionary と入力します。以下のような状態になるはずです。

Enterを押して、単語を調整します。

再度Enterを押すことで追加完了です。単語は作業ディレクトリの .vim/coc-settings.jsoncSpell.words に追加されます。

  "cSpell.words": [
    "nvim"
  ]

あとがき

導入は手軽でしたが、意外と嵌ったのは独自単語集の追加でした。coc-settings.jsonに定義した辞書設定は cspell trace の判定に掛からないため、作業ディレクトリ内にcspellの設定に合わせたcSpell.jsonを作成した上でチェックできるようにすると確実です。

参考