最後の設定で :QuickRun を行う hook

元ネタ:https://twitter.com/kanno_kanno/status/225611572389756928


C++ でコーディングしている場合、よくヘッダーを変更して :QuickRun する為に .cpp に戻るような動作を行なっているのですが、上記の quickrun-hook を使えばヘッダーからでも簡単に :QuickRun を行うことが出来ます。
と、言う感じで、わたしも前々から欲しいなー思っていたのでガーッと書いてみた。

[ソース]

" quickrun-run_prevconfig {{{
let s:prev_config={}

let s:hook = {
\   "name" : "run_prevconfig",
\   "kind" : "hook",
\   "config" : {
\       "enable" : 0,
\   }
\}

function! s:hook.init(session)
    if self.config.enable
        if has_key(s:prev_config, "input") && empty(s:prev_config.input)
            call remove(s:prev_config, "input")
        endif
        call extend(a:session.config, s:prev_config, "force")
    endif
endfunction

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


let s:hook = {
\   "name" : "save_prevconfig",
\   "kind" : "hook",
\   "config" : {
\       "enable" : 1,
\   }
\}

function! s:hook.on_normalized(session, context)
    let s:prev_config = deepcopy(a:session.config)
endfunction

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


割りとざっくり書いたのであまりテストしてませんので何か問題があるかも。
とりあえず、何となく動いている感じ。
config を直接変更・追加している quickrun-hook を使用している場合は問題が起こりそうなので注意。
あと config.input が empty だとエラーになったのでゴニョゴニョしています。


これでバッファの行き来が減るので結構重宝しそうですね。