Ctags

Ctags（英: Ctags）はソース及びヘッダ内にある名前のインデックス（又はタグ）ファイルを生成するプログラム。様々なプログラミング言語に対応している。言語に依存するが、サブルーチン(関数)、変数、クラスのメンバ、マクロ等がインデックス化される。これらのタグによりテキストエディタなどのツールで高速かつ容易に定義を参照できる。ファイルを出力でき、また名前についての情報を形で列挙した言語ファイルを生成することもできる。
Ctagsはケン・アーノルドがBSD Unix用に開発した。後にJim KlecknerによりFortranがサポートされ、ビル・ジョイによりPascalがサポートされた。
ctagsをサポートするエディタ.
"タグインデックスファイル"は下記を含む数多くのソースコードエディタでサポートされている。
ctagsの派生版.
"ctags"にはいくつかの派生版が存在する。
Etags.
EtagsはEmacs上で動作するctagsである。ctagsが生成するViフォーマットのタグファイル用にのみ意味のあるオプションはetagsでは解釈されず無視される。
Exuberant Ctags.
Darren Hiebertが開発したExuberant Ctagsは元々Vimと共に配布されていたが、Vim 6のリリースに合わせて独立したプロジェクトになった。Emacs互換機能をサポートしている。
Exuberant Ctagsは正規表現を用いることにより数多くのプログラミング言語に対応でき、30以上の言語に対応している。
タグファイルのフォーマット.
複数のタグファイルフォーマットがある。その一部を以下で説明する。説明中の<\x##>は16進数でバイトを表している。
Ctagsフォーマット及びExuberant Ctagsフォーマット.
オリジナルの"ctags"フォーマットとExuberant Ctagsフォーマットはファイルフォーマットが似ている。
Ctagsフォーマット.
エディター「vi」系用のフォーマット。タグファイルは通常は codice_1 という名前である。
タグファイルは行単位でフォーマットされている。
各フィールドは以下のように定義される。
タグファイルの検索を高速にするためタグファイルは codice_2 のフィールドでソートされる。
Exuberant Ctagsフォーマット.
Vim用のフォーマット。後方互換性のため出力フォーマットとしてオリジナルの"ctags"フォーマットと拡張フォーマットを選択できる。
各フィールドは以下のように定義される。
拡張フィールド
拡張フォーマットでは ex コマンドの後ろに ex コメントを続ける形でオリジナルの vi の実装との下位互換性を維持したままで{タグアドレス}フィールドを拡張できる。これらの拡張フィールドはタブで区切られたキー・バリューのペアである。詳細はctagsのマニュアルを参照のこと。
Etagsフォーマット.
Emacs用の codice_5 のフォーマット。タグファイルは通常は codice_6 という名前である。
codice_5 のファイルは複数のセクションで構成されている。入力ソースファイル毎に1つのセクションを持つ。各セクションはプレーンなテキストファイルであるが、特別な制御用にアスキー外の文字を使用する。以下の説明においてこれらの文字は<>で囲まれた16進数のコードで表す。
セクションは2行のヘッダで始まる。1行目はcodice_8一文字のみを含む。2行目は次のようになる。
ヘッダの後にはタグの定義が続く。各定義毎に1行。フォーマットは以下の通り。
タグ定義よりタグの名称が導き出せる場合はcodice_2 とその後ろの codice_10 が無視される。
例.
ソースコードとして次のような1行だけのtest.cを読み込ませた場合、
codice_6 ファイルは次のようになる。