quickrun の outputter を自分好みに拡張してみた

quickrun には、すでに便利な outputter がいくつが用意されているんですが、細かく設定したい場合、既存の outputter を拡張した方が楽かなー、と思い書いてみました。
既存のものを拡張するだけなので割と簡単ですね。

[オレオレ outputter]

" :QuickRun -outputter my_outputter
" プロセスの実行中は、buffer に出力し、
" プロセスが終了したら、quickfix へ出力を行う

" 既存の outputter をコピーして拡張
let my_outputter = quickrun#outputter#multi#new()
let my_outputter.config.targets = ["buffer", "quickfix"]

function! my_outputter.init(session)
    " quickfix を閉じる
    :cclose
    " 元の処理を呼び出す
    call call(quickrun#outputter#multi#new().init, [a:session], self)
endfunction

function! my_outputter.finish(session)
    call call(quickrun#outputter#multi#new().finish, [a:session], self)
    " 出力バッファの削除
    bwipeout [quickrun
    " vim-hier を使用している場合は、ハイライトを更新したりとか
    " :HierUpdate
endfunction

" quickrun に outputter を登録
call quickrun#register_outputter("my_outputter", my_outputter)

こんな感じ。


元々は、C++コンパイル時に

「コンパイル中は buffer にリアルタイムに出力して、最終的に quickfix に出力されたら便利じゃなイカ?」

って事をつぶやいたら、id:thinca さんに、

:Quickrun -outputter multi:buffer:quickfix

を教えてもらって、それを使用していたんですが、それだと

「buffer と quickfix の両方が表示されてちょっとややこしいよねー」

って事で上記のような設定になりました。
まぁ各々のウィンドウを任意のタイミングで削除しているだけの拡張ですね。
しかし、相変わらず Vim のバッファやウィンドウの扱いが分からないなぁ……。


とりあえず、これで、

  • コンパイルの終了タイミングが分からない
  • vim-hier のハイライトが更新されない

という問題も一気に解決されてかなり満足。
うむ、素晴らしい!