Vim で C++ のコーディングを行うなら知っておきたい10のこと
第二弾?わたしが普段 C++ のコーディングを行っている時の機能とか、プラグインとかのまとめです。
逆にいうと、これぐらいしか知らないので、もっと便利な機能があれば教えてください。
結構ざっくりと書いたので、分からないことがあれば、コメントか Twitter でリプもらえれば反応出来るかもしれません。
まぁ『Vim でこういう事ができるんだぜー!』的な感じで読んでもらえれば幸いです。
☆1.複数行コメント
vim-user : http://vim-users.jp/2011/03/hack205/
複数行を選択した状態で、コメントアウトを行います。
[キーバインド]
コメントアウト | |
コメントを外す |
☆2.ヘッダーファイルを開く
使用する為には、path にインクルードディレクトリを追加する必要があります。
[キーバインド]
新しいウィンドウで開く | |
新しいウィンドウで開く | |
gf | 新しいバッファで開く |
新しいタブで開く |
[_vimrc]
" path にインクルードディレクトリを設定します let $BOOST_ROOT = "C:/boost/boost_1_46_1" set path+=$BOOST_ROOT
☆3.インクルード時のヘッダーファイルのディレクトリ補完
#include を行う際に、インクルードディレクトリから、ヘッダーファイルへのディレクトリ補完を行います。
(msvc2010の様な機能)
[プラグイン]
[_vimrc]
" path もしくは、g:neocomplcache_include_paths に " インクルードディレクトリを設定します let $BOOST_ROOT = "C:/boost/boost_1_46_1" set path+=$BOOST_ROOT
[参照]
http://d.hatena.ne.jp/osyo-manga/20110213/1297615382
☆4.Vim からコンパイル/実行を行う
同型のプラグインとして、QuickRun が有名ですが、わたしは、SingleCompile を使用しています。
SingleCompile では、QuickFix で出力が行われるので、比較的簡単にエラー箇所を追う事が出来ます。
また、各コンパイラの拡張設定や、複数コンパイラを設定することで、切り替える事が出来ます。
詳しくは、下記を参照してください。
[プラグイン]
[コマンド]
:SCCompile | コンパイル |
:SCCompileRun | コンパイル実行 |
:SCViewResult | コンソールの出力結果を取得 |
[参照]
http://www.vim.org/scripts/script.php?script_id=3115
http://d.hatena.ne.jp/osyo-manga/20110302/1299080946
http://d.hatena.ne.jp/osyo-manga/20110220/1298235720
☆5.クロスコンパイルを行う
SingleCompile では、複数のコンパイラを設定することによって、動的にコンパイラを変更することが出来ます。
[プラグイン]
[コマンド]
:SCChooseCompiler | コンパイラの選択 |
[_vimrc]
" gcc の C++0x 版を追加する let common_run_command = '$(FILE_TITLE)$' call SingleCompile#SetCompilerTemplate( \ 'cpp', 'g++ 0x', \ 'GNU C++ Compiler', 'g++', '-std=gnu++0x -g -o $(FILE_TITLE)$', \common_run_comman
☆6.コンパイルエラーを出力/街頭箇所へ飛ぶ
SingleCompile では、Quickfix に出力が行われるので、それを利用します。
Quickfix のウィンドウから、各エラー箇所へジャンプする事が出来ます。
[プラグイン]
[コマンド]
:copen | Quickfix ウィンドウを開く |
☆7.エラー箇所を可視化
hier は、Quickfix の該当箇所をハイライト表示で表示するプラグインです。
これを利用して、SingleComple で出力されたエラー箇所(Quickfix)を可視化します。
[プラグイン]
[_gvimrc]
" _gvimrc で定義する " 波線で表示する場合は、以下の設定を行う " エラーを赤字の波線で execute "highlight qf_error_ucurl gui=undercurl guisp=Red" let g:hier_highlight_group_qf = "qf_error_ucurl" " 警告を青字の波線で execute "highlight qf_warning_ucurl gui=undercurl guisp=Blue" let g:hier_highlight_group_qfw = "qf_warning_ucurl"
[参照]
http://www.vim.org/scripts/script.php?script_id=3564
https://github.com/jceb/vim-hier
http://d.hatena.ne.jp/osyo-manga/20110501/1304273451
[注意]
clang だとエラーと警告の区別がうまく行われません。
上記の設定の場合では、警告も赤字の波線でハイライトが行われます。
色がうまく反映されない場合は、g:hier_highlight_group_qf 等をプラグインの読み込み前に設定してみて下さい。
☆8.バッファ内のクラス、関数の一覧を列挙する
unite-outline を使用して、バッファ内のクラス、関数の一覧を Unite で列挙します。
[プラグイン]
[コマンド]
:Unite outline
[参照]
https://github.com/Shougo/unite.vim
https://github.com/h1mesuke/unite-outline/wiki
☆9.関数定義にジャンプする
ctags で生成されたタグファイルを利用して、関数やクラス等の定義にジャンプします。
タグファイルは、neocomplcache が include 時に自動で生成します。
[外部ツール]
[プラグイン]
[キーバインド]
カーソル位置の定義に飛ぶ | |
現在のバッファのタグファイルを生成、tags の更新 |
[vimrc]
" 現在のバッファのタグファイルを生成する " neocomplcache からタグファイルのパスを取得して、tags に追加する nnoremap <expr><Space>tu g:TagsUpdate() function! g:TagsUpdate() execute "setlocal tags=./tags,tags" let bufname = expand("%:p") if bufname!="" call system( \ "ctags ". \ "-R --tag-relative=yes --sort=yes ". \ "--c++-kinds=+p --fields=+iaS --extra=+q " \ .bufname." `pwd`") endif for filename in neocomplcache#sources#include_complete#get_include_files(bufnr('%')) execute "set tags+=".neocomplcache#cache#encode_name('include_tags', filename) endfor return "" endfunction
[参照]
http://d.hatena.ne.jp/osyo-manga/20110206/1296988521
[注意]
ctags では、プリプロセスの展開がうまく行われなかったり、精度が低かったりするので、VisualStudi なんかと比べてしまうと見劣りしていまうかもしれません。
libstdc++ だとうまくジャンプできないかもしれません。
☆10.C++ のコード補完を行う
clang_complete を使用して、Vim 上で、VisualStudio の IntelliSense の様なコード補完を行うことが出来ます。
設定などを説明すると日が暮れるので、下記を参照してください。
Windows 環境だと苦行かもしれません……。
[外部ツール]
- clang
[プラグイン]
[参照]
https://github.com/Rip-Rip/clang_complete/wiki
http://d.hatena.ne.jp/osyo-manga/20110210/1297328933
http://d.hatena.ne.jp/osyo-manga/20110228/1298869326
[注意]
clang_complete と neocomplcache は月が吹っ飛ぶほど相性が悪いので注意してください。
デフォルトの設定だと、neocomplcache が機能しなくなってしまいます。
☆その他.Vim 上で実行デバッグを行う
Pyclewn という、ツール?プラグイン?を利用して、Vim 上で実行時デバッグを行うことが出来ます。
設定とか操作方法とか説明するのが手間なので、下記を参照してください。
まとめ
と、まぁこんな感じの環境で、C++ のコーディングを行っています。
コーディングを行うだけなら、ほぼストレスフリーの環境に仕上がったと思っているので、個人的にはかなり満足しています。
Vim 的な操作はまだまだ覚えることが多いですが、環境自体はほぼこれで完成かな?
基本的にショートコーディングが多いので、大規模開発だとまた違ってくるのかもしれません。
特に VisualStudio との連携は全然やっていませんね……ここら辺は、Vim 以外にも問題があるんですが。
コーディングは、Vim で満足しているんですが、実行時デバッグは、まだ VisualStudio に依存しそうです。
あと grep とかも全然使っていないので、もっと使わねば。
そんな感じで、晒し終了。
もし他にも、『こんな機能/プラグインを使えば、効率が上がるぜー!!』みたいなのがあれば教えてください。
[追記]
リンク先が間違っていたりしたのを修正。