非同期で動作するVim用のシンタックスチェックプラグインを開発しています

プラグイン名は activefix.vim です。まだ開発途中ですが、それなりに動作するようになったので公開します。

説明

シンタックスチェックを行うVimプラグインGitHub - vim-syntastic/syntastic: Syntax checking hacks for vim が有名ですが、これはシンタックスチェックを実行している間ユーザーの操作をブロックしてしまいます。
そこで、操作をブロックせずに、syntasticのように多数のファイルタイプに対応したシンタックスチェッカーを開発することにしました。

必要なもの

GitHub - Shougo/vimproc.vim: Interactive command execution in Vim.が必要です。ただし、vimprocがインストールされていなくても動作しないわけではなく、syntasticと同様にファイルを保存するときにブロックして実行するようになります。
プラグイン本体はGitHub - chikatoike/activefix.vim: Syntax checker for Vimにあります。これをpathgenやneobundle等、任意の方法でインストールしてください。

対応する形式

syntasticのソースコードを流用しているので、基本的にsyntasticと同じ形式に対応しています。また、形式毎のオプション変数も同じです。形式毎、というのはたとえばpythonなら g:syntastic_python_checker_args などです。一方g:syntastic_check_on_openはsyntastic本体のオプション変数で、activefix.vimでは適用されません。
また、そのまま流用できなかった形式があり、それらは現状未対応となっています。
使用できない形式は、ada,c,cpp,d,haskell,haxe です。
注意点として、上ではsynasticと同じ形式に対応していると書きましたが、今のところ動作を確認したのは python/pyflakes と ruby/mri だけです。その他の形式は動作しないかもしれません。そのうち確認していきます。

使い方

シンタックスチェックに使う外部プログラムがインストールされている状態であれば、以下のタイミングでシンタックスチェックを開始します。

  • ファイルを開いた時
  • ファイルを書き込んだ時
  • バッファを編集して、一定時間経過した時(updatetimeに設定してある期間)

インサートモードに入っている時でも動作します。ブロックしないので開始した後も操作可能です。
チェックが終了したら、自動的にlocation-listを開いてエラー一覧を表示します。該当行のハイライトもしますが、不完全かもしれません。

注意点

上に書いてあるupdatetimeはデフォルトで4000ミリ秒となっているので、バッファを変更してから開始するまでちょっと待つ必要があります。もっと早く開始したい場合は以下のような感じで短い時間を設定してください。

:set updatetime=1000

その他

上に書いた通り、syntasticのソースコードを流用しています。また、 id:thinca さんのquickrunのソースコードを流用しています。このプラグインの実装について大雑把にいうと、 quickrunの上にsyntasticを乗せた感じです。quickrunのrunnerやhookのようなモジュール構造も参考にした、というよりほとんどそのまま使っています。ただし、quickrunと互換性があるけでもないし、現状は拡張性もないです。

最後に

いまはまだドキュメントを用意できていません。そのうち書きます。