quickrun.vim で特定の範囲を出力しないようにする・続き

昨日のつづき。
よくよく考えると runner-vimscript を改ざんしなくても &verbosefile のみ変更すればよかったのでちょっと変えました。

[ソース]

let temp1 = g:verbosefile_push(tempname())

echo "homu"

let temp2 = g:verbosefile_push(tempname())

echo "mado"

call g:verbosefile_pop()

echo "saya"

call g:verbosefile_pop()

echo "mami"

echo readfile(temp1)
echo readfile(temp2)


" 昨日のコードもそのまま使用出来る
echo "homu"

QuickRunVimScriptSilentBegin

echo "mado"
echo "saya"

QuickRunVimScriptSilentEnd

echo "mami"

[出力]

mami
['', 'homu', 'saya']
['', 'mado']
homu
mami


push/pop の呼び出しはあまり好きではないのですが、まぁ呼び出し側のコードを簡単にする場合これが無難かなーと。
Scope Exit が欲しくなる。

[実装]

let s:verbosefiles = []

function! g:verbosefile_push(file)
    call add(s:verbosefiles, &verbosefile)
    let &verbosefile = a:file
    return a:file
endfunction


function! g:verbosefile_pop()
    let &verbosefile = get(s:verbosefiles, -1)
    unlet s:verbosefiles[-1]
endfunction


command! QuickRunVimScriptSilentBegin
\    call g:verbosefile_push(tempname())

command! QuickRunVimScriptSilentEnd
\    call g:verbosefile_pop()