9

私は ctags を使い始めたばかりで、このツールを高く評価していますが、私の意見では、タグ ファイルを管理する方法はやや面倒で、非常に柔軟性がありません。

現在のタグファイルの管理方法:

  1. のホーム フォルダーに1 つのモノリシック タグファイルが保存されています。~/.vim/tags
  2. コードを更新したり、プロジェクトを変更したりすると、古いタグ ファイルを削除してモノリシック タグ ファイルを再生成するスクリプトを実行します (プロジェクトを変更するときは、ctags が実行される場所を変更する必要があります)。

モノリシックなタグ ファイルが 1 つあれば、作業中の現在のプロジェクトに関連するすべてのシンボルにジャンプできるため、うまくいきます。

大規模/巨大なコードベースでは、単一のモノリシック タグ ファイルは機能しませんか? 大きな/巨大なコードベースで巨大なタグファイルが機能しないのはなぜですか?

タグファイル (またはタグファイルの複数形) を管理する他の方法は何ですか?

また、タグ ファイルを管理するための新しい方法が優れている理由は何ですか? (おそらく、より良い解決策はより複雑になることがあります。そのため、解決策がより複雑である場合、タグ ファイルを管理するためのより複雑な方法の追加の利点は何かを尋ねています。)


ps 「 vimctags-tips-and-tricks 」と呼ばれる ctags について話している stackoverflow の質問を見つけましたが、この質問はタグ ファイルの管理方法については説明していません。

4

4 に答える 4

10

私が最近気に入っているアプローチの 1 つは、VCS (バージョン管理システム) フックを使用して ctags ファイルを生成することです。小さなプロジェクトなどでもgitをローカルで使用しているため、コミットするたびにctagsが更新されます(これは明らかに、他のすべてのVCSで可能です)。

個人的には、ctags ファイルを各プロジェクトのディレクトリに配置するのが好きですが、このアプローチはグローバルでも同様に機能するはずです。

EDIT : VCS フックは、チェックアウト、コミット、復帰などの特定のアクションが実行されたときに自動的に実行されるスクリプトまたはプログラムです。
さらに読むには、次のリンクをお勧めします。

フックは、私が遭遇したすべての VCS で一般的に利用可能であり、使用することを選択した VCS のドキュメントを見つけることができると確信しています。

于 2009-08-11T12:17:52.357 に答える
7

tagsファイルをプロジェクトディレクトリに置きました。これにより、プロジェクトごとにタグが分離されます。

大規模なコードベースの場合、更新の頻度を減らすだけです。通常、キーワードにジャンプしようとして、何らかの理由でそこにない場合にのみ更新します。結局のところ、目的はコードの他の部分にすばやく到達することであり、何らかの方法でそこに到達した場合は、タグ ファイルが古くなっている場合でも機能します。

于 2009-08-10T19:34:38.070 に答える
1

Greg と同じように、私はタグ ファイルをプロジェクト ディレクトリに保存します。次に、プロジェクトプラグインとそのin=タグを使用して、タグ ファイルの場所を設定し、再生成時tagscscope.outさまざまなプロジェクトで再帰を使用するかどうかを設定します。

私は通常、重要な変更があった場合にのみタグ ファイルを更新します。これは、タグが古くなっている場合でも、通常は正しい行 (または少なくともほぼ正しい行) に到達するためです。更新する主な理由は、新しい列挙型、構造体などを追加し、タグ構文の強調表示を更新したい場合です。

于 2009-08-11T07:02:21.250 に答える
0

タグ ファイルが 1 つしかない vim プラグインを除いて、プロジェクトごとに 1 つの ctags データベースもあります。

これは、次の 2 つのことを意味します。

  1. 「プロジェクト」を検出し、それに応じてvim設定を設定する方法。それができるプラグインはたくさんあります。
  2. 異なるプロジェクトに対して異なる設定を同時に行う方法。そこでsetlocal tags=...(/ setlocal tags+=) がその役割を果たします。

ほとんどの場合、プロジェクトはタグを共有しません。結果として、現在のプロジェクトを検出して、タグを更新する場所とタグを読み取る場所を自動的に定義できることに満足しています。これらは 2 つの異なるユース ケースであり、vim は最後のユース ケースのみを (ネイティブに) 処理します。最初のユース ケースを処理するプラグインは、情報を格納するために (バッファ ローカル) 変数を指定する必要があります。

実際には、ファイルを保存すると 1 つの特定のタグ データベースのみが更新されますが、一度に複数のベースのタグを取得する必要がある場合があります。これは、相互に依存するライブラリ/プロジェクトで作業している場合のユース ケースです。インポートする (サード パーティの) コードで何かをチェックする必要があることがよくあります。グローバル&tagsオプションを使用することもできましたが、(今のところ) 個別のバッファーに個別の値を持つことを選択しました。繰り返しますが、この使用例は、私が使用している local-vimrc プラグインのおかげで処理されます。

タグデータベースの更新に関しては、プラグインで行われます(私が維持していますが、同様の機能を持つ他のプラグインが存在します): 関連するプロジェクトタグデータベースから現在のファイルに関連付けられているタグを削除し、-aオプションで更新します。バックグラウンドで。ファイルを保存するたびにプロジェクト全体を解析する必要はありません。

プロジェクト ファイルが vim スコープ外で更新された場合でも、プロジェクト全体でタグを実行する可能性があります。すべてがコミット フックで透過的ですが、コード識別子にスペル ミスの単語としてフラグが立てられないように、vim スペル チェック辞書を更新できます。純粋なコミットフックのアプローチでは、もう少し面倒だと思います。

于 2017-08-14T14:56:42.393 に答える