quickrun.vim で msvc のバージョンを指定してコンパイルを行う

この記事は Vim Advent Calendar 2012 178日目の記事になります。


さて、今まで quickrun.vim で使用する msvc を動的に変更する場合、こんな感じで環境変数を変更するようにしていました。
しかし、Lingr でよさげなコードを見かけたのでこれをパクって quickrun-hook として書いてみました。

[ソースコード]

" quickrun-vcvarsall {{{
let s:hook = {
\   "name" : "vcvarsall",
\   "kind" : "hook",
\   "config" : {
\       "enable" : 0,
\       "bat" : "",
\   },
\}

function! s:hook.on_module_loaded(session, context)
    if type(a:session.config.exec) == type([])
        let a:session.config.exec[0] = join([self.config.bat, $PROCESSOR_ARCHITECTURE, '\&']) . a:session.config.exec[0]
    else
        let a:session.config.exec = join([self.config.bat, $PROCESSOR_ARCHITECTURE, '\&']) . a:session.config.exec
    endif
endfunction


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


let g:quickrun_config = {
\   "cpp/msvc2010" : {
\       "command" : "cl",
\       "exec"    : ['%c %o %s', '%s:p:r.exe %a'],
\       "cmdopt"  : "/EHsc",
\       "hook/output_encode/encoding" : "sjis",
\       "hook/vcvarsall/enable" : 1,
\       "hook/vcvarsall/bat" : shellescape($VS100COMNTOOLS  . '..\..\VC\vcvarsall.bat'),
\   },
\
\   "cpp/msvc2008" : {
\       "command" : "cl",
\       "exec"    : ['%c %o %s', '%s:p:r.exe %a'],
\       "cmdopt"  : "/EHsc",
\       "hook/output_encode/encoding" : "sjis",
\       "hook/vcvarsall/enable" : 1,
\       "hook/vcvarsall/bat" : shellescape($VS90COMNTOOLS  . '..\..\VC\vcvarsall.bat'),
\   },
\
\   "cpp/msvc2005" : {
\       "command" : "cl",
\       "exec"    : ['%c %o %s', '%s:p:r.exe %a'],
\       "cmdopt"  : "/EHsc",
\       "hook/output_encode/encoding" : "sjis",
\       "hook/vcvarsall/enable" : 1,
\       "hook/vcvarsall/bat" : shellescape($VS80COMNTOOLS  . '..\..\VC\vcvarsall.bat'),
\   },
\}


使用する vcvarsall.bat は各々の環境で設定して下さい。