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