Vim script のエラーを全て出力する quickrun-runner

quickrun 0.6.0 (多分)から Vim script を実行する為の quickrun-runner が実装されました。
これを使用することで Vim script のエラーを quickrun-outputter で出力を行う事が出来ます。
しかし、現状の使用では最初のエラーしか出力が行われず、全てのエラーは出力されません。


って、事で全てのエラーを出力する quickrun-runner を書いてみました。
基本的に outputter-vimscript のコピペ。

[ソース]

let s:runner = {}
let s:runner.name = "vimscript_all"
let s:runner.kind = "runner"

function! s:runner.run(commands, input, session)
    let code = 0
    for cmd in a:commands
        let [result, code] = s:execute(cmd)
        call a:session.output(result)
        if code != 0
            break
        endif
    endfor
    return code
endfunction

function! s:execute(cmd)
    let result = ''
    let error = 0
    let temp = tempname()

    let save_vfile = &verbosefile
    let &verbosefile = temp

    let old_errmsg = v:errmsg
    let v:errmsg = ""

    try
        silent! execute a:cmd
    finally
        let error = !empty(v:errmsg)
        let v:errmsg = old_errmsg
        if &verbosefile ==# temp
            let &verbosefile = save_vfile
        endif
    endtry

    if filereadable(temp)
        let result .= join(readfile(temp, 'b'), "\n")
        let result =  substitute(result, "\n行", "行", "g")
        call delete(temp)
    endif

    return [result, error]
endfunction
call quickrun#module#register(s:runner, 1)
unlet s:runner

" example
" :QuickRun -runner vimscript_all