回答:
あふれんばかりのctagsは、これを達成する最も簡単な方法です。GNU / Linux(UbuntuやDebianなど)では、次のことができるはずです。
sudo apt-get install exuberant-ctags
(OSXの場合は「$ brew install ctags」で十分です。Windowsの場合は、http://ctags.sourceforge.net/にアクセスして、スタンドアロンの実行可能ファイルをダウンロードできます)
次に、プロジェクトのルートフォルダーに移動して実行します
ctags -R --exclude=.git .
これはプロジェクト全体をスキャンし、vimが自動的に使用してキーを押すと機能にジャンプする機能を提供する./tagsファイルを作成します。すなわち:
Ctrl + ]
実装を確認したい関数の上にカーソルを置いてください。他にもctagsを使用してコード内をナビゲートできるようにする組み合わせや多くのコマンドモード関数があります(たとえば、古いタグスタックエントリにジャンプするにはCtrl+ t)。:help 29.1
概要を参照してください。
コードの重要な変更ごとにctagsを再実行し、プロジェクトのインデックスを再作成する必要があることに注意してください。それを手動で行うか、ホットキーまたは書き込み時にvimにそれを行うように教えることができます。
ヒント: ctagsを広範囲に使用する場合、vim-taglist(http://vim-taglist.sourceforge.net)プラグインも一見の価値があります。そのクラス/ファイルのすべての関数のリストを含むIDEスタイルのアウトラインが表示されます。
これまでのところ、関数の宣言または定義のいずれかを見つける問題の2つの解決策に名前を付けることができます。タグベースの別のよく知られたソリューションがあることは知っていますが、私はそれを使用しないので、他の人があなたにそれを与えるようにします。
より多くのトレンディ1は、最初:YouCompleteMeはあり:GoToDefinition
と:GoToDeclaration
コマンドのペアを。
私が使用するもの(10年の長い習慣を変えるのは難しいです)。私のlh-tagsプラグインには、ctagsデータベースを生成し、増分的に更新する方法があります。またCTRL+W Meta+Down
、カーソルの下にあるもの(/選択されているもの)に一致するすべての宣言と定義を表示する方法()を提供します。このソリューションはctagsに依存しているため、カーソルの下にある識別子のどのオーバーロードが実際に関連しているかを知ることはできません。他のctagsベースのソリューションは、このトピックについて悪い(/良い)べきです。ただし、ここではYCMの方がはるかに優れているはずです。
Discl .:より人間工学的な代替手段としてlh-tagsを実装しました:tselect
。
(実際に私は、第三の溶液を覚えている:私はのフォーク始まった打ち鳴らす-インデクサーおよび関連vimのプラグイン、それをカプセル化しているだろう。しかし周りYCMで、私はこのソリューションを忘れるように思います。)
編集:2019年現在、最も効率的なソリューションはLSPサーバーに依存しています。COC + cclsを使用して、インデックスを作成し、ジャンプし、さらに多くのことを行います。あまり時間をかけないプロジェクトやclangとcclsの最新バージョンをインストールできないプロジェクトのCOCを構成するのが面倒な場合、タグベースのソリューションに戻ります。
GoToDeclaration
複数のソースファイルでのみ動作します。以下に関するドキュメントからの引用GoToDefinition
ですFor C-family languages this only works ... when the definition of the symbol is in the current translation unit.
。また、コマンドは:YcmCompleter GoTo*
です。
いくつかの選択肢があります。最初のものはctags
です。より高度なインデクサーが必要な場合cscope
は、より良い代替手段です。たとえば、特定の関数のすべての呼び出し元をリストできます。これらのツールは、コードを実際に正しく理解せずにコードにインデックスを付けます(特定のシンボルの意味を知るための簡単な文法定義があります)。また、その文法を拡張することは比較的簡単です。taglist
プラグインは、これらを持っている必要があり、それはタグリストでshow結果にインデクサ文法を拡張することが可能です。
インデクサー以上のものが必要な場合は、構文チェックのようなYouCompleteMe
方法がおそらく道です。の上に構築されているため、llvm
適切なパーサーがあります。これにより、コードの構文とセマンティクスを確認できます。
次に、ドメイン固有の言語または埋め込みコードを含むコードを使用する場合、多くの場合、ファイルを介して単にグレッピングします。代替手段はAck
、このタスクを支援しようとするperlスクリプトです。
ctagsが必要だと思います。Vimはctagsとネイティブに統合されており、関数の定義と宣言に簡単にジャンプできます。