2013-10-19 13 views
7

ファンクション名を簡単にクリックする(または簡単なショートカットを使用する)ことができ、その呼び出し先をすべて見つけたり、定義されているところで開くことができます。 WebのWebマニュアルのほとんどは、実際には実行するのが難しいか、うまく動作しません。 allocuvmをクリックして定義されている箇所を参照したいとします。そのためvi/vimのCコードで関数の呼び出し元と呼び出し先を見つけるにはどうすればよいですか?

uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP); 
+3

を読みます。関数の呼び出し元を見つけるには、* cscope *を使用します。 Googleはこれらの2つの用語を、あなたは多くの情報を見つけるでしょう。 – glts

答えて

10

、Vimはのcscopeツールと統合。詳細については、:help cscopeを参照してください。

+1

私はcscopeがC++メソッドの呼び出し先を見つけることができないことを発見しました。 「この関数によって呼び出された関数を見つける」コマンドは、C関数でのみ機能します。 C++の場合、ClassName :: MethodNameを渡すと「これはCのシンボルではありません」というメッセージが表示されますが、このパターンでは「Egrep y:MethodName」が返されます。ただし、 "この関数を呼び出すファンクション"(呼び出し元)は、C関数とC++メソッドの両方で機能します。 – kakyo

11

cscopeのインゴはそれを言及した

最小限の例では、ここでの例です。

ゴープロジェクトのベースディレクトリに移動し、実行します。

cscope -Rb 

これは、解析された情報が含まれているcscope.outファイルを生成します。 Linuxカーネルのような巨大なプロジェクトであっても、世代は合理的に高速です。

オープンVIMと実行します。

:cs add cscope.out 
:cs find c my_func 

ccallersのニーモニックです。他のcscope提供の問合せも可能で、ニーモニックが下にリストされています

help cscope 

これあなたが開くことができるQuickFixリストに発信者のリストを追加します。

:copen 

ゴーラインにあなたに興味を持ち、そこにジャンプするためにエンターを押してください。

、現在カーソルの下の関数名の発信者を見つけ、あなたの.vimrcに追加するには:

function! Csc() 
    cscope find c <cword> 
    copen 
endfunction 
command! Csc call Csc() 

とカーソルが関数の上にあるときに:Csc<enter>を入力してください。

TODO:

アドバイスの言葉:私はヴィムが大好きですが、この種のものをセットアップするにはあまりにも複雑です。プロジェクトがあなたにとって問題がある場合は、プロジェクトをいくつかの「IDE」で作業してみてください。プロジェクトがIDE設定ファイル(レポを汚染する自動変更ブロブ...)を追跡しない場合は、若干のオーバーヘッドがかかるかもしれませんが、それは私にとって価値があります。 C/C++の場合、これまでの私のお気に入りはKDevelop 4でした。

+0

''( 'ctrl-r ctrl-w')はvimにカーソルの下に単語を挿入します。これにより、 'cs find c my_func'が少し使いやすくなります。 – patrickvacek

+0

@patrickvacekはいこれは別のオプションです。しかし、 ':cs find c'は多くの文字であるため、 ''とコマンドを使うことを好みます;-) –

0

vi/---はviの検索機能です。同じコマンドを繰り返します。

それは はgrepをsedの大きなファイル であれば、あなたも(ストリームエディタ)のsedを使用することができますあなたの行番号を取得することができます

は* * ctagsのを使用して、定義にジャンプするためのmanページ

関連する問題