5

良い一日、

私は通常、比較的小さな(20,000行未満のコード)プロジェクトで作業します。これらのプロジェクトはすべて、単一のディレクトリ内に自己完結型であり、独自のMakefileを持ち、操作はかなり簡単です。

VIMは私の好みのエディターであり、プロジェクトを開くときは、通常、F10キーへのマッピングを介してctagsリストを作成します。

map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

CTRLこれにより、カーソルをテキスト上に移動して+]を押すか、OmniCppCompleteを介してドロップダウンリストでコード補完を使用することにより、変数/構造体などの定義にジャンプできます。

しかし、私は現在、たくさんの構造物を利用する少し大きなプロジェクトに取り組んでいます。さらに、これらの構造の多くには、メンバーとして他のカスタム構造の配列が含まれているため、コードの補完は、現在私にとって非常に便利で重要なツールです。

多くの.Cファイルと.hファイルを含む2つのパスがあり、それらはマシンごとに変わる可能性があります。.bashrcただし、各マシンには、次のようにそれらを指す環境変数がファイルにあります。

SDK_SRC_PLUS_HEADERS=/public/sdk
THIRD_PARTY_SDK=/private/sdk

(VIMの組み込みOmniCppComplete機能を介して)コード補完を実行しようとしたときにVIMがこれらの追加パスの内容を自動的に参照できるようにしたい、またはVIMでCTRL+を使用したときにこれらの場所のファイルにジャンプできるようにしたい]構造体、関数、変数などの定義にジャンプします。

したがって、上記の両方のパスについて、私cdはそれらにアクセスし、を介してタグを生成しますctags -R。次に、次のよう~/.vimrcに、追加のタグパスを含めるようにファイルを変更しました。

tags=./tags
tags+=$SDK_SRC_PLUS_HEADERS/tags
tags+=$THIRD_PARTY_SDK/tags

次にcd、でプロジェクトにアクセスし/home/user1/projects/test、VIMを起動しF10、VIMを押してインデックスを作成します。ただし、これはまったく機能しません。実際、プロジェクト自体のためだけにタグを使用することさえできなくなります(つまり、CTRL+]は何もしません)。

環境変数を介して複数のソースディレクトリを使用して、コード補完のソースタグとジャンプして定義を作成する方法について誰か提案がありますか?

お手数をおかけしますが、よろしくお願いいたします。

4

2 に答える 2

2

@seheが提供するソリューションに追加したかったのです。

これは、私が自分に加えた最後の変更セットです.vimrc。最初の行は、拡張環境変数パスを変数に追加するためのものtagsです。もう1つは、SDKを更新する必要があり、誤って古いタグを使用したくない場合にタグを自動更新するためのものです。

" CTAGS tag generation for OmniCppComplete
set tags+=./tags
exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags")
exec expand("set tags+=$THIRD_PARTY_SDK/tags")
" Can verify taglist is correct via ":set verbose tags?" command

" Create a mapping to delete the old tags, re-generate them, and use them
map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . \| rm -f $SDK_SRC_PLUS_HEADERS/tags \| ctags -R -f $SDK_SRC_PLUS_HEADERS/tags $SDK_SRC_PLUS_HEADERS/tags  \| rm -f $THIRD_PARTY_SDK/tags \| ctags -R -f $THIRD_PARTY_SDK/tags $THIRD_PARTY_SDK/tags  \| echo "Done re-generating tags."<CR>
于 2012-11-26T17:30:50.427 に答える
1

確かに、タグ設定内で環境変数を使用できないことが問題のようです。

私は回避策としてこれを思いついた:

:let &tags.=expand(",$SDK_SRC_PLUS_HEADERS/tags")

これはもう少しフレンドリーかもしれません:

:exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags")
于 2012-11-24T00:40:12.970 に答える