Quickrun で、非同期コンパイル/実行が出来る設定を書いた

Quickrun の製作者である、id:thinca さんに Quickfix へ出力を追加して頂いたので、真面目に Quickrun の設定をしました。
使用している、Quickrun は、v0.5.0 dev です。
詳しくは、ここら辺を参照してください。


とりあえず、現状はこんな感じ。
わかりやすくまとめようと思ったら、逆にわかりづらくなって、ぐぬぬ……。
Vim が難しくてハゲる。

[_vimrc]

" デフォルトの設定
let g:quickrun_config["_"] = {
    \  "runner/vimproc/updatetime" : 100,
    \ "split": "{'rightbelow 8sp'}"
\ }

" 実行
let g:quickrun_config["run/vimproc"] = {
    \ "exec": "%s:p:r %a",
    \ "output_encode" : "utf-8",
    \ "runner" : "vimproc",
    \ "outputter" : "buffer"
\ }


" C++ 用の設定
" 基本的にコンパイルのみ行う設定で、
" 実行は ["run/vimproc"] で行う
let $BOOST_LATEST_ROOT="D:/boost/boost_1_46_1"
let include_dirs = $BOOST_LATEST_ROOT

" gcc コンパイラオプション
let l:gcc_option= include_dirs.'-Wall -fexec-charset=CP932 '
let l:gcc_lib_path=' '
"    let l:gcc_lib_path='-L '.$BOOST_LATEST_ROOT.'/stage/lib '

" msvc のオプション設定
let l:msvc_debug_option =
    \"/Zi /nologo /W3 /WX- /Od /Ob1 /Oy- /DWIN32".
    \"/D_DEBUG /D_CONSOLE /D_UNICODE /DUNICODE".
    \"/Gm /EHsc /RTC1 /MTd /GS ".include_dirs

let l:msvc_release_option = 
    \"/DWIN32 /D_CONCOLE /DNDEBUG ".
    \"/nologo /MT /EHsc /GR ".include_dirs

let l:msvc_release_link_option=
    \"/link -LIBPATH:".$BOOST_LATEST_ROOT."/stage/lib ".
    \" 'kernel32.lib' 'user32.lib' 'gdi32.lib' ".
    \"'comdlg32.lib' 'advapi32.lib' 'shell32.lib' 'ole32.lib' ".
    \"'oleaut32.lib' 'uuid.lib' 'odbc32.lib' 'odbccp32.lib' "

let l:msvc_debug_link_option = l:msvc_release_link_option."/DEBUG "

let l:quickrun_cpp_default = {
    \ "type" : "cpp",
    \ "runner" : "vimproc",
    \ "outputter" : "quickfix"
\ }

" msvc デバッグビルド
let g:quickrun_config["msvc_debug"]={}
call extend(g:quickrun_config["msvc_debug"], l:quickrun_cpp_default)
let g:quickrun_config["msvc_debug"]["command"]="cl"
let g:quickrun_config["msvc_debug"]["exec"]="%c %o %s ".l:msvc_debug_link_option
let g:quickrun_config["msvc_debug"]["cmdopt"]= l:msvc_debug_option
let g:quickrun_config["msvc_debug"]["output_encode"]="sjis"

" msvc リリースビルド
let g:quickrun_config["msvc_release"]={}
call extend(g:quickrun_config["msvc_release"], g:quickrun_config["msvc_debug"])
let g:quickrun_config["msvc_release"]["exec"]="%c %o %s ".l:msvc_release_link_option
let g:quickrun_config["msvc_release"]["cmdopt"]= l:msvc_release_option

" g++
let g:quickrun_config["g++"]={}
call extend(g:quickrun_config["g++"], l:quickrun_cpp_default)
let g:quickrun_config["g++"]["command"]="g++"
let g:quickrun_config["g++"]["exec"]="%c %o %s -o %s:p:r".l:gcc_lib_path
let g:quickrun_config["g++"]["cmdopt"]= l:gcc_option

" g++0x
let g:quickrun_config["g++0x"]={}
call extend(g:quickrun_config["g++0x"], g:quickrun_config["g++"])
let g:quickrun_config["g++0x"]["cmdopt"]=l:gcc_option." -std=gnu++0x "

" clang++
let g:quickrun_config["clang++"]={}
call extend(g:quickrun_config["clang++"], g:quickrun_config["g++"])
let g:quickrun_config["clang++"]["command"]="clang++"
    
" clang++0x
let g:quickrun_config["clang++0x"]={}
call extend(g:quickrun_config["clang++0x"], g:quickrun_config["g++0x"])
let g:quickrun_config["clang++0x"]["command"]="clang++"

一部だけコピってきたので、これだけだと動かないかも。
C++ だと【コンパイルを行うだけ】の場合も多いので、コンパイルと実行を分けて設定しています。
上記の設定だと、

vimproc を使用して、非同期にコンパイルが行われて、Quickfix へ出力される
  • 実行
vimproc を使用して、非同期に実行され、専用のバッファへ出力される

みたいな感じにしています。
非同期でコンパイルされるのが楽しいいイイ!


とりあえず、このまま使ってみて、問題がなさそうなら、SingleCompile から乗り換える予定。
ついでに、SingleCompile の方の機能とかも取り込みたいところですね。
Quickrun 関連のネタとかもぼちぼち書いていくかな。
兎に角、これではわたしも、Quickrunner の仲間入りですね!!

[Quickrun]

v 0.5.0 dev