30725


ctagsを使ってタグファイルを作りvimから利用したいと考えています  
`ctags -R`を使えば再帰的にタグが作られて、下のディレクトリにあるファイルからでもタグジャンプができるようになるはずです

しかしなぜかうまくいきません。

プロジェクトのルートディレクトリで`ctag -R`を実行した後で下のディレクトリに移動してファイルを開き、タグジャンプしようとすると

[code]

    E433: No tags file
    E426: tag not found: common_logger_config
    
[/code]

というエラーメッセージが表示されます

このプロジェクトはpythonで書かれており、ctagsもpythonに対応しています


CC BY-SA 3.0
2016-11-27T02:54:04.063
30705
2016-11-27T11:04:17.103
5246
question
vim ctags
ctagsで-Rを使っても再帰的にタグが作られない


> E433: No tags file

と出ているので、そもそもタグファイルが見つけられていません。

  * `tags` ファイルがきちんと生成されているか
  * Vim の `'tags'` オプションが正しく設定されているか(設定方法は `help 'tags'` を参照してください)

以上を確認してみてください。


CC BY-SA 3.0
2016-11-27T03:34:31.040
30706
2016-11-27T03:34:31.040
2541
30705
answer


> ctags -Rを使えば再帰的にタグが作られて

`ctags -R` を実行した際のカレントディレクリに tags ファイルが作られているはずです。その中に、 `ctags -R`
実行した時に指定したディレクトリ以下を再帰的にスキャンした結果のタグが、格納されているはずです。各ディレクトリに対して tags
ファイルが作られるわけではないことに気をつけてください。

また Vim のほうでは特に設定しなければ、カレントディレクトリにある tags
ファイルを利用します。そのために以下の操作をしていた場合にはタグファイルが見つからず、質問のようなエラーになると考えられます。

> プロジェクトのルートディレクトリでctag -Rを実行した後で下のディレクトリに移動してファイルを開き

以上から、とりあえずはプロジェクトルートで `ctags -R .` を実行した後に、プロジェクトルートで Vim
を起動してカレントディレクトリを変更せずに、下のディレクトリにあるファイルを開いてから、タグジャンプをしてみてください。


CC BY-SA 3.0
2016-11-27T04:19:06.367
30708
2016-11-27T04:19:06.367
208
30705
answer


E433 が表示されている場合、Vim からTAGSファイルが見つけられてない可能性があります。  
: をタイプしてコマンドラインに移り、  
:echo tagfiles()  
を実行すると、現在認識しているTAGS ファイルの一覧が確認できます。  
もしその一覧になにも表示されていない場合、tags オプションを見直すべきかもしれません。


CC BY-SA 3.0
2016-11-27T04:30:34.267
30709
2016-11-27T04:30:34.267
19738
30705
answer


Vimは`'tags'`オプションの値をカンマ区切りで参照して見つかったtagsファイルから`タグ`を探します。  
現在の設定は`:set tags?`で確認できます。  
デフォルト値は`./tags,tags`です。(`./tags,./TAGS,tags,TAGS`の場合もありますがここでは便宜上`./tags,tags`で説明します)

1つめの`./tags`は今編集しているファイルの在るディレクトリに`tags`があればそのファイルから`タグ`を探します。  
2つめの`tags`はカレントディレクトリに`tags`があればそのファイルから`タグ`を探します。

そうなんです。デフォルト値だとプロジェクトルート下のサブフォルダがカレントディレクトリの場合にプロジェクトルートの`tags`ファイルを参照しないんです。

ではどうするかというと、「上向き検索」指定をします。  
`'tags'`にファイル指定時に末尾に`;`を指定するとそのディレクトリから上に遡ってファイルを探します。  
具体的には`set
tags=./tags;,tags;`と設定します。こうすることによって、プロジェクトルート下のサブフォルダにいてもプロジェクトルートの`tags`ファイルを参照するようになります。

詳しくはhelpを参照下さい。  
(`:h 'tags'`→`file-searching`でタグジャンプ→`/^2)`で検索)


CC BY-SA 3.0
2016-11-27T11:04:17.103
30725
2016-11-27T11:04:17.103
2687
30705
answer