quickrun.vim で動的に各バージョンの Visual Studio のコンパイラを指定する
[追記]
中断した時に正しく終了していなかったので修正。
quickrun.vim 等で Visual Studio の cl.exe を使用してソースファイルをコンパイルをする場合、cl.exe のパスなどを環境変数に設定しておく必要があります
これを quickrun-hook で動的に設定する事によって、使用する Visual Studio を指定出来るようにしてみました。
これで動的に使用する Visual Studio を変更する事が出来ます。
とりあえず、Visual Studio 2005〜2010 は動作することを確認しました。
[vimrc]
" cl.exe を使用する場合、予め設定しておく必要がある " Windows SDK(or Platform SDK?) let s:hook = { \ "name" : "msvc_compiler", \ "kind" : "hook", \ "config" : { \ "enable" : 0, \ "target" : "", \ }, \ "path" : "", \ "lib" : "", \ "libpath" : "", \ "include" : "", \} function! s:hook.init(...) if !self.config.enable return endif let self.path = $PATH let self.lib = $LIB let self.libpath = $LIBPATH let self.include = $INCLUDE let $VSINSTALLDIR=self.config.target " let $VSINSTALLDIR="C:/Program Files/Microsoft Visual Studio 10.0" let $VCINSTALLDIR=$VSINSTALLDIR."/VC" let $DevEnvDir=$VSINSTALLDIR."/Common7/IDE;" "let $PATH=$FrameworkDir.$Framework35Version.";".$PATH "let $PATH=$FrameworkDir.$FrameworkVersion.";".$PATH let $PATH=$VSINSTALLDIR."Common7/Tools;".$PATH let $PATH=$VCINSTALLDIR."/bin;".$PATH let $PATH=$DevEnvDir.";".$PATH let $INCLUDE=$VCINSTALLDIR."/include;".$INCLUDE let $LIB=$VCINSTALLDIR."/LIB;".$LIB let $LIBPATH=$VCINSTALLDIR."/LIB;".$LIBPATH endfunction function! s:hook.sweep(...) if !self.config.enable return endif let $PATH = self.path let $LIB = self.lib let $LIBPATH = self.libpath let $INCLUDE = self.include endfunction call quickrun#module#register(s:hook, 1) unlet s:hook " }}} let g:quickrun_config = { \ \ "cpp" : { \ "type" : "cpp/msvc2010-debug", \ }, \ \ "cpp/msvc2010-debug" : { \ "command" : "cl", \ "exec": ["%c %o %s /nologo /Fo%s:p:r.obj /Fe%s:p:r.exe > nul", \ "%s:p:r.exe %a"], \ "cmdopt" : "/EHsc", \ "hook/msvc_compiler/enable" : 1, \ "hook/msvc_compiler/target" : "C:/Program Files/Microsoft Visual Studio 10.0", \ }, \ \ "cpp/msvc2008-debug" : { \ "command" : "cl", \ "exec": ["%c %o %s /nologo /Fo%s:p:r.obj /Fe%s:p:r.exe > nul", \ "%s:p:r.exe %a"], \ "cmdopt" : "/EHsc", \ "hook/msvc_compiler/enable" : 1, \ "hook/msvc_compiler/target" : "C:/Program Files/Microsoft Visual Studio 9.0", \ }, \ \ "cpp/msvc2005-debug" : { \ "command" : "cl", \ "exec": ["%c %o %s /nologo /Fo%s:p:r.obj /Fe%s:p:r.exe > nul", \ "%s:p:r.exe %a"], \ "cmdopt" : "/EHsc", \ "hook/msvc_compiler/enable" : 1, \ "hook/msvc_compiler/target" : "C:/Program Files/Microsoft Visual Studio 8", \ }, \ \} " 使い方 " QuickRun cpp/msvc2005-debug " QuickRun cpp/msvc2008-debug " QuickRun cpp/msvc2010-debug
quickrun-hook で各 Visual Studio のパスを設定、 quickrun 終了時に元に戻しています。
ただ、これだと quickrun 以外で cl.exe を使うことが出来ないのと、quickrun 中に $PATH 等を変更すると爆発するので要注意。