関数呼び出しにジャンプする方法は?


14

タグファイルを生成した後exuberant-ctags、関数呼び出しからその宣言にジャンプできます<C-]>

私の質問は、他の方法でそれを行う方法ですか?カーソルが関数の定義上にある場合、関数が呼び出される行に移動するにはどうすればよいですか?

ctagsで生成されたファイルを見ると、呼び出しの場所ではなく、定義の場所に関連する情報しか表示されません。それはできないことを意味します。それ以外exuberant-ctags


AckまたはAgも動作し、これらのコマンドラインツールのプラグインラッパーを簡単に見つけることができます。例:github.com/mileszs/ack.vimおよびgithub.com/rking/ag.vim
ダッシュトムバン

回答:


11

を使用して関数呼び出しにジャンプすることはできませんctags。C / C ++およびJavaにはがありcscope、Vimとうまく統合されます(を参照:help cscope)。他の言語では、cscope互換性のあるデータベース(hscopeHaskell、starscopeRuby、Go、JavaScriptのfi)を生成/エクスポートするツールを見つけることができるかもしれません。また、使用することができるcscopeGNUグローバル指し示すことによって、データベースcscopeprggtags-cscope

ちなみに、英語の使用を時折困惑させることで先送りにならない場合は、;)の代わりにuniversal-ctagsを使用することもできますexuberant-ctags。後者は何年も更新されていません。前者は積極的にメンテナンスされているフォークです。


cscopeはC / C ++およびJava以外の言語をサポートしていますか?
edi9999

@ edi9999 cscope自体は、C / C ++、Lex、およびYaccをサポートしています。Javaのサポートはわずかに役立ちます。あなたはGNUから(古いスタイル)PHPとJavaScriptのサポートを得ることができますglobalを経由して、gtags-cscopeユーティリティ。そして、上で言ったように、cscope互換性のあるデータベースをエクスポートできる他のインデクサーがあります。
佐藤桂

8

ctagsではできません。

cscope(独自のヘルプセクションもあります:help cscope)やglobalなど、より強力な代替手段を試してください。


cscopeはC / C ++およびJava以外の言語をサポートしていますか?
edi9999

はい、少なくともPHPとJavaScript。
ロメイン

1
@romainlいいえ、cscopeそれ自体はPHPもJavaScriptもサポートしていません。ただし、GNU を使用してPHPおよびJavaScriptファイルのインデックスを作成してglobalから、実行gtags-cscopeして結果のgtagsファイルをで使用できますcscope
佐藤桂

@SatoKatsura、はい、cscope はJavaScript(およびCSS)をサポートしています
ロメイン

2
@romainl 簡単な実験に基づいて推測するのではなく、cscopeソースを調べることを検討してください。 cscopeかなりリラックスしたCパーサーがあります。それがすべてであり、それがすべてです。そのパーサーを使用すると、適切な値の「サポート」のために、多くの言語を「サポート」します。構造体は、Cに多少似ている限り認識されます。そのため、fi Javaクラスと新しいPHP構造体は認識されません。fiとstarscopeを比較します。これにより、実際に新しい言語を追加できます。
佐藤桂

8

Vimのgrepコマンドを使用して、プロジェクト内のすべてのファイルを検索できます。

:grep! "\<<cword>\>" . -r
:copen

それをキーバインドに入れましょう:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

大規模ななじみのないコードベースを探索しているとき、このワンキーのプロジェクト全体の検索は非常に貴重であると思います。

\<\>は、単語の開始と終了を示す正規表現シーケンスであるため、部分一致は取得されません。(-wこれを実現する別の方法として、grep のオプションがあります。)

ただし、これは非インテリジェント検索であるため、同じ単語が無関係のコンテキストに表示される場合、誤検出が発生する可能性があります。


正直に、代わりにgrep.vimプラグインの独自の修正バージョンを使用します。これは少し使いやすいです:

  • これにより、検索パターンとgrepコマンドラインを編集できるため(のsrc/ lib/代わりに特定のフォルダーをターゲットにできます.)、変更を記憶します。
  • Googleのcsearchのサポートを追加しました。これは、各ファイルを毎回スキャンするのではなく、単語のインデックスを作成するため、grepよりもはるかに高速です。特に、csearchはわずかに異なる正規表現標準を使用するため\b\<andの代わりに使用する必要があり\>ます。

私はそれを設定し、このようないくつかの標準ファイルを除外します。

高速アクセスのために、2つのキーバインドを作成します。 F3コマンドラインを編集できますF4。追加のキーストロークなしで以前に設定したコマンドラインを使用します。このメカニズムはかなりいため、クリーンアップを使用できますが、うまく機能しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.