私はVim(あるいはgVim)と一緒に Ctags (C++の開発を支援するため)をインストールしました。そしてあなたの好きなコマンド、マクロを見つけたいと思います。 、ショートカット、それに伴うヒント...
あなたの最高の兵器を共有しましょう。 Vim開発でのC++には他にどのVimアドオンをお勧めしますか?
EDITCtagsと組み合わせて他にどのようなアドオンを使用しますか?
EDIT2どのバージョンのgVimをタグとともに使用しますか?違いはありますか?
EDIT3大小両方のプロジェクトで、プログラミングの経験をどのように高めますか?
Ctrl+] - 定義に進む
Ctrl+T - 定義から戻ります。
Ctrl+WCtrl+] - 水平分割で定義を開く
これらの行をvimrcに追加するmap <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
Ctrl+\ - 新しいタブで定義を開く
Alt+] - 垂直分割で定義を開く
タグが生成された後。以下のキーを使用して、機能へのタグ付けおよび機能からのタグ付けを解除できます。
Ctrl+ Left MouseClick
- 定義に移動する
Ctrl+ Right MouseClick
- 定義から戻る
いつも私の.vimrcに入る一行:
set tags=./tags;/
これはカレントディレクトリで "tags"を探し、見つけられるまでルートに向かってツリーを進めます。つまり、ソースツリーのルートではなく、どこにでも配置できます。
C開発のためのもう1つの便利なプラグインは cscope Ctagsで定義にジャンプできるように、Cscopeは呼び出しにジャンプします 関数。
〜/ bin /ディレクトリにcscopeがある場合は、.vimrcに以下を追加してg ^]を使用して呼び出し関数に移動します(help cscopeを参照)。
if has("cscope")
set csprg=~/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
endif
ほとんど忘れてしまった... ctagsと同じように - データベースを生成する(そして定期的に更新する)必要があります。私は次のスクリプトを使います
select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files
'select_files'はMakefileからCとヘッダファイルのリストを抽出する別のスクリプトです。このようにして、プロジェクトで実際に使用されているファイルだけにインデックスを付けます。
あなたのctagsルックアップにディレクトリを追加することができます。たとえば、Qt4用に作成されたctagsインデックスがあり、これを.vimrcに入れます。
set tags+=/usr/local/share/ctags/qt4
上記のすべてと...
code_complete:関数パラメーターの完成、コードスニペットなど。
taglist.vim:ソースコードブラウザ(C/C++、Java、Perl、python、tcl、sql、phpなどをサポート)
私はALT-leftとALT-rightを使ってタグスタックをポップ/プッシュ/タグスタックからプッシュします。
" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>
移動にhjkl
を使用する場合は、代わりに<M-h>
と<M-l>
をマップできます。
同じ名前の複数の定義
<C-w>g<C-]>
は分割して定義を開きますが、:tjump
も定義に移動するか、または複数の定義がある場合は選択可能な定義のリストを表示します。
私が一番使っているコマンドはC-]で、カーソルの下の関数の定義にジャンプします。より頻繁にそれを使用して、より多くの電話に従うことができます。その後、C-oはあなたを1レベル戻し、C-iはさらに深くなります。
タグリスト プラグインは必需品です。それはそれが知っているすべてのタグ(あなたが開いたファイル)を別々のウィンドウにリストし、より大きなファイルをナビゲートするのを非常に簡単にします。
私は主にPythonの開発にそれを使っていますが、C/C++のためだけに良いものになることができます。
私は十分な大きさのc ++プロジェクトをサポートするために2年間私のvimプラグインを適応させてきました。あなたはそれらを見てみることができます。
彼らはctagsとcscsopeを使います。
http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507
私は.gvimrcファイルに次のコードを追加しました。これはgvimの起動時にいつでもタグファイルを探すためにツリーを検索します。
function SetTags()
let curdir = getcwd()
while !filereadable("tags") && getcwd() != "/"
cd ..
endwhile
if filereadable("tags")
execute "set tags=" . getcwd() . "/tags"
endif
execute "cd " . curdir
endfunction
call SetTags()
それから私は定期的に私のソースツリーの一番上にあるようなスクリプトでタグファイルを再生成します:
#!/bin/bash
find . -regex ".*\.\(c\|h\|hpp\|cc\|cpp\)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -
私はmacosでvimを使っていますが、オリジナルのctagsはうまく動かないので、最新版をダウンロードしてmake make make installします。 ctgasを/ usr/local/bin/ctagsにインストールします(元のものを維持するため)
"taglist
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let Tlist_WinWidth = 50
map <leader>ta :TlistToggle<cr>
map <leader>bta :!/usr/local/bin/ctags -R .<CR>
set tags=tags;/
map <M-j> <C-]>
map <M-k> <C-T>
上記のSetCcope()関数をもう一度繰り返します。 "cscope.out"が次のディレクトリにあることなく、cscopeのプリパスが一致するように設定します。
function s:FindFile(file)
let curdir = getcwd()
let found = curdir
while !filereadable(a:file) && found != "/"
cd ..
let found = getcwd()
endwhile
execute "cd " . curdir
return found
endfunction
if has('cscope')
let $CSCOPE_DIR=s:FindFile("cscope.out")
let $CSCOPE_DB=$CSCOPE_DIR."/cscope.out"
if filereadable($CSCOPE_DB)
cscope add $CSCOPE_DB $CSCOPE_DIR
endif
command -nargs=0 Cscope !cscope -ub -R &
endif
上記のSetTags()検索関数(同等のset tags+=./tags;/
に置き換えられます)をcscope用に変更しました。動作しているようです!
"cscope file-searching alternative
function SetCscope()
let curdir = getcwd()
while !filereadable("cscope.out") && getcwd() != "/"
cd ..
endwhile
if filereadable("cscope.out")
execute "cs add " . getcwd() . "/cscope.out"
endif
execute "cd " . curdir
endfunction
call SetCscope()