Subscribed unsubscribe Subscribe Subscribe

Vimで保存時の構文チェックを非同期にやるようにする

今までは、.vimrcに

function! _CheckPerlCode()
    exe ":! perl -c %"
endfunction

command! CheckCode call _CheckPerlCode()
autocmd BufWrite *.pl,*pm,*t :CheckCode

のように書くことで、保存のたびの構文チェックを「同期的に」やっていたのだけれど*1、編集するファイルが1500行くらいを超えたものだと構文チェックに3秒以上かかってしまって、その間Vimの操作がブロックされるのが非常にストレスだった。
なので、構文チェックは非同期にやって、Vimの操作をブロックしないようにした。
まず以下のようなスクリプトを適当な場所に作る。

これを保存のたびに実行させるように .vimrc に以下のように書く。

function! _CheckPerlCode()
    exe ":! perl /path/to/async_syntax_checker.pl %"
endfunction
command! CheckCode call _CheckPerlCode()
autocmd BufWrite *.pl,*pm,*t :CheckCode

シンタックスエラーがあった場合はGrowlで通知するようにしているけど、Linuxな環境であればGrowlで通知してる部分をログファイルに吐く処理にでも置き換えればいいと思う。


本当はシンタックスエラーの情報をvimに対してバックグラウンドから非同期に通知するようにしたかったけど、Qiitaで質問してみたところそれは難易度が高そうだったので、今回はそこまではやらなかった。

*1:ErrorMaker.vimが思うように動かない(useしてるモジュールの構文までチェックしてしまう)のでやむを得ずこの方法にした