vim-watchdogs でエラーがなかった時に通知する
問題
vim-watchdogs は,vim-quickrun をバックエンドに用いた汎用的でカスタマイズ自在なシンタックスチェックプラグインです.紹介記事をいくつか挙げると
- watchdogs.vim つくりました - C++でゲームプログラミング (作者の osyo-manga さんの記事)
- vim-watchdogsで快適なシンタックスチェック - Blank File
などがあります.
vimproc と併用すれば(大体任意のタイミングで)非同期に処理できるのが売りの一つですが,逆に非同期で処理してもらっていると,チェック中なのかエラーがなくて黙ってるのかわかりにくくなってしまいます.チェックが終わったらなにかしらの通知が欲しい.どうすればよいのでしょうか.
解決
vim-watchdogs が依存している shabadou.vim で定義された hook/echo/enable
を使います.
次のような設定を加えてみます(g:quickrun_config["watchdogs_checker/_"]
に何かしら入ってる場合はそれに加える感じでやってください).
let g:quickrun_config["watchdogs_checker/_"] = {
\ "hook/echo/enable" : 1,
\ "hook/echo/output_success": "> No Errors Found."
\ }
これで :WatchdogsRun
するとこのようになります.
エラーが見つかった時に何かしら echo
してもらいたければ output_failure
を使います.
簡単な解説
shabadou については shabadou.vim を使って quickrun.vim をカスタマイズしよう - C++でゲームプログラミング が参考になります.
平たくいえばこういう感じ(と理解している)
- quickrun は仕組みとして
hook
を提供している. - vim-watchdogs は quickrun つかって色々やってる
- だから watchdogs のこのタイミングでなんかして欲しい,という時も quickrun の hook を使えば良い.
- 色々便利な hook 集が shabadou で,よしなに使えるのを使う.
:h shabadow-hook/echo
には次のようにあります.
- "echo" *shabadou-hook/echo*
設定された |quickrun-hook-point| にコマンド出力を行います。
オプション ~
output_{point} デフォルト: ""
{point} 時に設定した文字列をコマンド出力します。
Example >
" コマンドの成功時に "success"
" コマンドの失敗時に "failure"
" を出力する
:QuickRun
\ -hook/echo/enable 1
\ -hook/echo/output_success success
\ -hook/echo/output_failure failure
まさに欲しいやつっぽい.めでたい.
他には?
基本的になんかしたいんだけどナーって時には先の作者の方による解説記事読んだり,そのの下の方に設定例があるのでそれぞれ眺めてみるとかすると良いと思います.
原理的には要するに quickrun でできることがひと通りできるはずで,時間のかかるチェックであればアニメーションも考慮にはいります.
昨日は VimConf2014 でしたが,その中の supermomonga さんの 発表 (かなりすごい)にあるような感じで喋らせるのも楽しいかもしれませんね(便利).