web-dev-qa-db-ja.com

Vim:ctagの設定が困難です。サブディレクトリのソースには、プロジェクトルートにタグファイルが表示されません

今日、Vimで(熱狂的な)ctagsを使用してセットアップしようとしていますが、正しく動作させるのに苦労しています。コマンドラインでctagsファイルを生成します:

cd myproj
ctags -R

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

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

MyClassNameにはtagsファイルにタグがあることを確認しましたが、Vimには表示されません。誰かがルートのタグファイルを参照するようにVimを構成する方法を説明できますか?

ありがとう。

57
Thomas

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

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

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

116
Amjith

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

次の構成を使用します。

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

ヘルプから抽出:

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

例::set tags =。/ tags、tags、/ home/user/commontags

そして、現在の作業ディレクトリを、tagsfileが生成される一番上のプロジェクトディレクトリに保持します。

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

見る :help tags-optionタグのパスの詳細について。

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

15
Xavier T.

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

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

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

1
3cheesewheel
#!/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ファイルに入れて実行します...これにより、確実にタグが生成されます。

1