げっとシステムログ

WEB開発メモ

coc.vim で textlint する話

  • coc.vim で efm-langserver を利用して textlint をかけるようにセットアップしてみる
CONTENTS
  1. 出来上がったもの
  2. coc.vim の設定
  3. efm-langserver の設定
  4. textlint の設定
  5. まとめ
  6. 参考資料

出来上がったもの

  • coc.vim -> efm-langserver -> textlint

coc.vim の設定 :CocConfig は以下の通り。

{
  "languageserver": {
    "efm": {
      "command": "efm-langserver",
      "args": [],
      "filetypes": ["markdown"]
    }
  }
}

efm-langserver の設定 $HOME/.config/efm-langserver/config.yaml は以下の通り。

languages:
  markdown:
    lint-command: 'npx textlint --format unix ${INPUT}'
    lint-formats:
      - '%f:%l:%n: %m'

textlint の設定 .textlintrc は以下の通り。

{
  "rules": {
    "preset-ja-technical-writing": true
  }
}

TOP

coc.vim の設定

coc.vim の設定 :CocConfig は以下の通り。

{
  "languageserver": {
    "efm": {
      "command": "efm-langserver",
      "args": [],
      "filetypes": ["markdown"]
    }
  }
}

markdown に対して efm-langserver が起動するように設定する。

トラブルシューティングには、:CocInfo で簡単なログを見ることができる。

TOP

efm-langserver の設定

$HOME/.config/efm-langserver/config.yamlefm-langserver の設定を設置する。

languages:
  markdown:
    lint-command: 'npx textlint --format unix ${INPUT}'
    lint-formats:
      - '%f:%l:%n: %m'

lint-command で設定したコマンドが実行される。

${INPUT} がファイル名に置換するためのプレースホルダ。 README には標準入力を受け付ける例しか書いていないが、ファイル名を指定するにはこうする。

標準入力を指定するとバッファに対して lint してくれるような気もするが、textlint ではうまくいかなかった。

lint-formats には、vim の errorformat の制御文字列を記述する。 lint-command の出力がこのパターンにマッチする場合は diagnostics が追加される。

なお、この設定では %f:%l:%n: %m としている。 これは以下の意味を持つ。

  • %f : ファイル名
  • %l : 行番号
  • %n : 本来この部分は column %c だが、単なる数値にマッチする %n でこれを無視する
  • %m : メッセージ

%n の部分を %c としたら、エラーメッセージがそのカラムにカーソルがないと非表示になってしまった。 vim の画面にどのカラムがエラーか表示されないので、これでは不便。 このため column のデータを無視することにした。

TOP

textlint の設定

textlint はローカルにインストールする。

.textlintrc は以下を設定する。

{
  "rules": {
    "preset-ja-technical-writing": true
  }
}

ここではルールセットとして textlint-rule-preset-ja-technical-writing をインストールしているので、これを有効化している。

TOP

まとめ

coc.vim で efm-langserver を利用して textlint するために必要な設定をまとめた。

以前は markdownlint を入れたらなんか textlint までしてくれるようになったのだが、これが突然効かなくなったのでちゃんと設定した。

TOP

参考資料

TOP