70

私は今日Vimで(あふれんばかりの)ctagsをセットアップしようとしていますが、正しく動作させるのに苦労しています。コマンドラインで次のコマンドを使用してctagsファイルを生成します。

cd myproj
ctags -R

これにより、タグファイルがmyprojルートに配置されます。ただし、Vimは、ルートにあるソースで作業している場合にのみ、このタグファイルから読み取るようです。より深いディレクトリに移動するときに、を使用してタグにジャンプしようとすると、次の<C-]>ようになります。

E433: No tags file
E426: tag not found: MyClassName

MyClassNameのタグファイルにタグが含まれていることを確認しました。Vimにタグが表示されないだけです。ルートのタグファイルを参照するようにVimを設定する方法を誰かが説明できますか?

ありがとう。

4

5 に答える 5

141

.vimrcこれをファイル に追加set tags=tags;/

これにより、現在のフォルダでタグファイルがチェックされ、1つのディレクトリからルートフォルダまで移動し続けます。

したがって、プロジェクト内の任意のサブフォルダーに入ることができ、タグファイルを見つけることができます。

于 2011-02-16T16:27:56.923 に答える
15

タグファイルを探す場所をVimに指示するオプションがあります。

次の構成を使用します。

" search first in current directory then file directory for tag file
set tags=tags,./tags

ヘルプからの抜粋:

タグファイル名が「./」で始まる場合、「。」現在のファイルのパスに置き換えられます。これにより、現在のファイルがあるディレクトリでタグファイルを使用できるようになります(現在のディレクトリが何であっても)。"./"を使用するという考え方は、最初に検索するタグファイルを定義できることです。現在のディレクトリ( "tags、。/ tags")または現在のファイルのディレクトリ( "./tags,tags") 。

例::settags = ./ tags、tags、/ home / user / commontags

tagsそして、現在の作業ディレクトリを、ファイルが生成される最上位のプロジェクトディレクトリに保持します。

:pwd次に(Vim内で)を使用し:cd myprojて、タグファイルを含むディレクトリに移動します。

タグパス:help tags-optionの詳細については、を参照してください。

問題は、ディレクトリが間違っているか、tagsオプションが正しく設定されていないことです。

于 2011-02-16T14:23:22.927 に答える
2
#!/bin/sh

FREEZE_NAME=/* Give some version number */

mkdir $HOME/ctags/$FREEZE_NAME

V1=/* Software Path */

find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags

find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags

cd $HOME/ctags/$FREEZE_NAME/

rm -f all.tags

cat c.tags h.tags >> all.tags

sort all.tags > temp.tags

mv temp.tags all.tags

rm -f c.tags h.tags 

上記のコードを.shファイルに入れて実行します...これにより、タグが確実に生成されます。

于 2016-04-25T08:04:16.087 に答える
1

プロジェクトごとにタグファイルを生成する場合、特に.vimrc異なるマシン間で共有する場合は、このパターンが気に入るかもしれません。

let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")                         
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "")

次に、環境変数$ REPO_HOMEを末尾のスペースなし.bashrcでメインリポジトリディレクトリに設定する必要があります(例)。これにより、$ REPO_HOMEの各サブディレクトリで深さ1のタグファイルが自動的に検索されます(例:) 。/home/<yourusername>/repos/home/<yourusername>/repos/myproj/tags

于 2013-09-16T14:56:40.877 に答える
0

以下のコードで.shファイルを作成します。そして、タグが必要な場所で.shファイルを実行します。それは確かに機能します。

#!/bin/sh`enter code here`
filelist=`mktemp`
find . -name \*.h >> ${filelist}
find . -name \*.c >> ${filelist}
find . -name \*.cc >> ${filelist}
find . -name \*.cpp >> ${filelist}
find . -name \*.hpp >> ${filelist}
if [ "$SDKTARGETSYSROOT" != "" ]; then
find $SDKTARGETSYSROOT/usr/include -name \*.h >> ${filelist}
fi
cat ${filelist} | ctags -L -
于 2020-10-01T04:14:22.477 に答える