vimに非同期なtextlintを適用して快適な編集環境を実現してみた

2019.04.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

vim上でtextlintを使う際に、環境次第ではlint実行時にまるでフリーズしたような硬直に見舞われることが増えてきました。暫く待つことで解消されるのですが、lintによるものなのか本当にPCトラブルが起きているのか見分けが付かない点で不便です。

vimのプラグインを漁っている過程でtextlintを非同期で実施すれば解消されることを知り、既に導入していたaleに合わせてみました。その備忘録となります。

必要なライブラリ

必要なvimプラグインは以下の通りです。

textlintについてnpmでインストールが必要です。

textlint/textlint

The pluggable natural language linter for text and markdown. - textlint/textlint

textlint設定手続き

極力エラーが出ることを防ぐために、先にtextlintを設定します。既に導入されている方は飛ばしてしまって問題ありません。

npm install textlint --global

~/.textlintrc

とりあえずの設定となっています。

{
  "rules": {
    "max-ten": {
        "max": 3
    },
    "spellcheck-tech-word": true,
  }
}

vim設定手続き

vimプラグインについては利用しているプラグイン管理に依存しますが、今回はdeinです。

Shougo/dein.vim

zap: Dark powered Vim/Neovim plugin manager. Contribute to Shougo/dein.vim development by creating an account on GitHub.

deinの導入(特にNeobundleからの移行)については、以下の記事を参考にして下さい。

NeoBundleからdein.vimへの移行 - Qiita

5年ほど前に構築したVimの環境を使いまわしていたら、いつの間にか**NeoBundle**がオワコンになっていたようで**dein**に移行したよという話です。基本的には [NeoBundle から dein.vim に乗り換えたら...

dein.toml

[[plugins]]
repo = 'w0rp/ale'
[[plugins]]
repo = 'itchyny/lightline.vim'
[[plugins]]
repo = 'maximbaz/lightline-ale'

~/.vimrc

lightlineとaleに関する設定を追加します。

let g:lightline = {}
let g:lightline.component\_expand = {
      \  'linter_checking': 'lightline#ale#checking',
      \  'linter_warnings': 'lightline#ale#warnings',
      \  'linter_errors': 'lightline#ale#errors',
      \  'linter_ok': 'lightline#ale#ok'
      \ }
let g:lightline.component\_type = {
      \     'linter_checking': 'left',
      \     'linter_warnings': 'warning',
      \     'linter_errors': 'error',
      \     'linter_ok': 'left'
      \ }
let g:lightline.active = { 'right': [[ 'linter\_checking', 'linter\_errors', 'linter\_warnings', 'linter\_ok'  ]]  }
let g:ale\_linters = {}
let g:ale\_linters.markdown = ['textlint']
let g:ale\_completion\_enabled = 1

まとめ

textlintをaleにて動かすと非同期の良さがとにかく実感できます。同期によるつっかかりが気になる方にはおすすめです。

参考にした記事