quickrun.vim が終了した時に実行したウィンドウへ戻る

LingrVim 部屋でそういう話がでていたので、gift.vim に quickrun-hook を追加してみました。
quickrun.vim で非同期で処理している間に別のウィンドウへ移動する場合はあると思います。
そういう場合に quickrun.vim の終了後に元のウィンドウへ戻りたいという時に使用する事ができます。

[関連]


上記の記事ではウィンドウレイアウトが変更されている場合、正しい位置に戻らなくなってしまうのですが、gift.vim を使用することでそれを回避する事ができます。

[プラグイン]

NeoBundle "osyo-manga/vim-gift"

[使い方]

" outputter/buffered だと出力バッファの内容が毎回クリアされないので
" クリアするための hook
let s:hook = s:make_hook_points_module({
\   "name" : "delete_buffer",
\   "kind" : "hook",
\   "config" : {
\       "enable" : 0
\   }
\})


function! s:hook.on_outputter_buffer_opened(...)
    echom "homu"
    silent % delete _
endfunction

call quickrun#module#register(s:hook, 1)
unlet s:hook


let g:quickrun_config = {
\   "_" : {
\       "runner" : "vimproc",
\       "outputter" : "buffered",
\       "outputter/buffered/target" : "buffer",
\       "hook/gift_back_start_window/enable" : 1,
\       "hook/delete_buffer/enable" : 1,
\   }
\}


本来、起動したウィンドウへ戻るだけであれば

"hook/gift_back_start_window/enable" : 1

を設定するだけでよいのですが、バッファへ出力する場合、ちょっとややこしかったので上記のような感じになっています。
(バッファへ出力する場合、実行中にも出力し続けるのでその対応。


ただし、バッファ以外の出力先(quickfix など)であれば

let g:quickrun_config = {
\   "_" : {
\       "runner" : "vimproc",
\       "outputter" : "quickfix",
\       "hook/gift_back_start_window/enable" : 1,
\   }
\}

だけで問題ないと思います。
あと今は終了時に hook しているんですけど成功時や失敗時に hook できれば便利そげ。