タオルケット体操

サツバツいんたーねっと

vintとvim-watchdogsでVimScriptライフを改善する

VimScriptつらいですね。
僕はたまにしか書かないのですが、たまにしか書かないからこそ何度も何度も同じ罠にハマって辛いです。一説によるとVimScriptは怒りの言語らしいので、ハマればハマるほど強くなるんでしょうがつらいものはつらいです。

そこでvintです。

転ばぬ先の杖「vint」 // Speaker Deck

ギッハブ

Kuniwak/vint · GitHub

vintがvimrcアンチパターンに対応したというはなし

vimrc アンチパターンを自動でチェックする - Qiita

そこでvintですといいましたが、情弱なので今さっき存在を知りました。

vintとはVimScript用のlint(シンタックスやコードの書き方についてチェックをしてくれるツール)のことです。
例えば、引数の頭にa:を付け忘れているとかのつらみを実行前に発見してくれるのは素晴らしいですね。

ですが、いちいちコマンドラインから叩いて何行目かを確認してVimに戻るのは大変です、腱鞘炎になります。ここはSyntasticみたく、リアルタイムにエラーや警告箇所を表示させたいです。

そういう時に便利なのがvim-watchdogsとかいう素敵プラグインです。
ようはシンタックスチェックなんかをする、Syntastic的なものを簡単に自分でも作れるようにしてくれる、フレームワーク的なものです。しかもquickrunを使っているので非同期に実行出来ます。

それと、もう一つvim-hierという、quickfixの結果を適当にパースしてエラーの場所をハイライトしてくれるプラグインを導入します。

以下、設定例です。

" cohamaさんforkの方が高機能なのでこっちをつかう
NeoBundle 'cohama/vim-hier'
" カーソル化のエラーメッセージをコマンドラインに出力する。お好みで
NeoBundle 'dannyob/quickfixstatus'
" watchdogsの依存プラグイン
NeoBundle "Shougo/vimproc"
NeoBundle "thinca/vim-quickrun"
NeoBundle "osyo-manga/shabadou.vim"
NeoBundle "osyo-manga/vim-watchdogs"

" vintコマンドが存在するときだけチェックを行うようにします
let g:quickrun_config = {
\    'vim/watchdogs_checker': {
\     'type': executable('vint') ? 'watchdogs_checker/vint' : '',
\    },
\    "watchdogs_checker/vint" : {
\       "command"   : "vint",
\       "exec"      : "%c %o %s:p ",
\   },
\ }

" ここはautogroup経由で定義するようにしないとvintに怒られます
autocmd BufWritePost .vimrc,*.vim WatchdogsRunSilent

簡単のためにNeobundle、quickrun自体の基本設定などいくつか簡略化して記述しています。
また、watchdogs自体のカスタマイズは:helpが充実しているのでそちらを読むことをおすすめします。

ともかく上記の設定を入れておくことで、保存するたびに自動でlintが走り、凡ミスやVimScript/vimrcアンチパターンへの厳しいレビューが入るようになります。ありがとうございます。

どんな言語でも実行前にヤバイ場所がわかるに越したことはないです。チェックツールさえ存在すれば、vim-watchdogsで簡単にリアルタイムなエラー表示が出来るようになるので大変な便利がありますね?
なお僕のvimrcの警告数は107でした。よくないですね。

vint自体の導入はpipやpipsiを使うと良いでしょう。
pipsiについてはこのエントリが参考になります。

Pythonの開発をしている人でPython製の便利スクリプトを導入するならpipsiが便利っぽい - タオルケット体操

VimScriptやプラグイン開発については以下の書籍が最強に参考になります。

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖

いじょうです。