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を構成する方法を説明できますか?
ありがとう。
これを.vimrc
ファイルset tags=tags;/
に追加します
これにより、現在のフォルダーのタグファイルがチェックされ、1つのディレクトリがルートフォルダーまでずっと移動します。
したがって、プロジェクト内の任意のサブフォルダーにいることができ、タグファイルを見つけることができます。
タグファイルを探す場所を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
そして、現在の作業ディレクトリを、tags
fileが生成される一番上のプロジェクトディレクトリに保持します。
使用する :pwd
その後 :cd myproj
(Vim内)を使用して、タグファイルを含むディレクトリに移動します。
見る :help tags-option
タグのパスの詳細について。
問題はおそらく、間違ったディレクトリにいるか、tags
オプションが正しく設定されていないことです。
すべてのプロジェクトに対してタグファイルを生成する場合、特に異なるマシン間で.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
。
#!/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ファイルに入れて実行します...これにより、確実にタグが生成されます。