CTAGS日本語対応版

Section: Exuberant Ctags (1)
Updated: Version 5.5.3j1
Index Return to Main Contents

 

名前

ctags - ソースコードに対するタグファイルを生成する。

 

書式

ctags [options] [file(s)]
etags [options] [file(s)]

 

説明

ctags および etags (以後、区別が必要なければ ctags) は、 さまざまなプログラミング言語で定義されているオブジェクト (関数やクラス、構 造体など) のインデックス (または "tag") ファイルを生成する。このタグファイ ルによって、テキストエディタやその他ユーティリティで (ソースコードを閲覧す る際に) 、オブジェクトの定義位置を迅速に、しかも簡単に見つけることが可能に なる。"tag" は、インデックスのエントリから、プログラミング言語で定義された オブジェクト (の定義位置) を示す (あるいはオブジェクトからインデックスのエ ントリを作り出す) 際に役立つ。

さらに、ctagsは、複数のソースファイルから検出したオブジェクトについ ての情報を、テキスト形式でリスト化し、クロスリファレンスファイルを生成する ことができる。

多くのエディタが、"tag" インデックスファイルをサポートしている。(それらの エディタで、コードをトレースした場合、)ソースファイル中に散見される名前と 結びつくオブジェクトの定義位置を示したり、該当するファイルのそのオブジェク トが定義されている行にジャンプしたりする。本リリース時点で知られているもの としては:

Vi(1) とそのクローン (例えば Elvis, Vim, Vile, Lemmy), CRiSP, Emacs, FTE (Folding Text Editor), JED, jEdit, Mined, NEdit (Nirvana Edit), TSE (The SemWare Editor), UltraEdit, WorkSpace, X2, Zeus

Ctagsは、種類のことなる多くのプログラミング言語を区別して、それ用の tagsファイルを生成することができる。Ctagsがサポートしているプログラミング 言語を列挙する。それぞれの言語用に、Ctagsが生成するtagsファイルについては、 巻末の --list-languagesTAG KINDS 参照。

 

ソースファイル

--language-force オプションが指定されていない場合、それぞれのソ ースファイルのプログラミング言語は、その言語専用にマッピングされたファイ ル名規則にしたがって自動認識される。それぞれの言語に効果のあるマッピングは、 --list-maps オプションを使って表示させることができ、--langmap オプションを使って変更することができる。その言語をサポートするプラットフォー ム上で、マッピングされていないファイル名や実行ファイルであった場合、認識 可能なスクリプト言語かどうかを判定するために、ファイルの先頭行の"#!"をチ ェックする。

デフォルトでは、その他のファイル名は無視される。この規則があるため、 ctagsを実行する場合、単一のディレクトリ内で(例えば "ctags *")と したり、ソースディレクトリツリー全体の中にある全てのファイルを(例えば "ctags -R")で指定して実行することができる。このように複数のファイル を指定しても、マッピングされているファイル名のファイルのみ読み込んで 動作するためである。

[拡張子 .h は、C言語というよりC++のファイルとしてマッピングされて いる。これは .h 拡張子が、C++で一般的に使用され、さらにC++ファ イルとして扱っても、実害がまったくないためである。]

 

オプション

有効なオプションが用意されているにもかかわらず、ctagsは、オプションを一 切使用せずに使われる場合(例えば "ctags *"、あるいは"ctags -R")が大半であ る。ctags を実行する場合、カレントディレクトリ内にある認識可能な ソースファイルに対するタグファイルを生成するだけで充分だからである。以 下に示すオプションは、単に特殊な使い方ができるようにするために提供され ているものである。

Note シングルハイフン("-")のオプションは、スペースで区切って、任意のパ ラメータを指定することができる。

Note 文字列型オプション指定するブール型パラメータ(ダブルハイフン"--"型 の直後に指定する"[=yes|no]"パラメータ)も任意で指定できる。こ れを省略した場合、"=yes" が指定されたと解釈される(例えば --sort と指定しても、--sort=yes と指定しても、同じ 動作となる)。さらに"=1" "=on"は、"=yes"と同義であり、 "=0" "=off"は、 "=no"と同義である。

オプションの中には、無視されるものや、etagsモード(-e オプション参 照)で実行した場合のみ有効となるものがある。そういったオプションについても 記述する。

ほとんどのオプションは、コマンドラインで指定したときに、その後に続く全て のファイルについて有効である。しかしオプションのなかには、直後に指定した ファイルにのみ有効なものもある。そういったオプションについては、そのこと を明記する。

言語名を指定するオプションは、言語名に大文字と小文字を区別しない。全ビルト-イン 言語一覧は、 --list-languages を参照。

-a
--appendと同様。

-B
後方検索パターン (例えば ?pattern?) を使用する。 [etags modeでは無視]

-e
etagsモードを有効にすることで、Emacs用のタグファイルを出力する。代わりに "etags"という文字列からはじまるコマンド名(実行ファイルの名前を変更したり、 ソースコードのビルド時に"etags"にする)で、ctagsを実行しても、 etags モードが有効になる。このオプションは、ソースファイルよりも前に付加 しなければならない。

-f tagfile
指定されたtagfileにタグを書き込む(デフォルトは"tags"、etagsモード のときは "TAGS")。"-" が指定された場合は標準出力に書き込む。すでに存在 するファイル名が指定され、かつそのファイルの先頭行に、tagfileとし て無効な文字列を含む場合、エラーとなる。これは誤って "ctags -f *.c"と タイプしてしまったときの危険を回避するためである。そうしなければ、最初の Cソースファイルが上書きされて、他のファイルのタグを書き込むことになる。 '-'(ダッシュ)ではじまる、マルチキャラクタのファイル名も (tagfileに)指定することはできない。ファイル名として指定している場 合が大半なのであろうが、次のオプションとして指定した文字列でも、ファイル 名と認識してしまうためである。もし('-'ではじまるファイル名) "-ugly" を 出力ファイルに指定したい場合、 "./-ugly"と指定すればよい。このオプショ ンは、ソースファイルよりも前に付加しなければならない。このオプションが複 数回使用された場合、最後のオプションのみ有効になる。

-F
前方検索パターン(例えば /pattern/)を使用する(デフォルト)。 [etagsモードで は無効]

-h list
インクルードファイルとして扱うファイルの拡張子を、ピリオドで区切って指定 する。拡張子のないファイルを示すために、ピリオドの後にはピリオドのない文 字列を続けなければならない(例えば ".", "..x", ".x." このようなパターンは N G)。このオプションは、特定のタグのスコープの解釈の仕方にのみ影響がある (すなわち 大域的に可視可能か、それを定義したファイル内部でだけ可視可能かを考 慮するかどうかにかかわらず); 特殊な言語にたいする拡張子はマッピングされて いない。インクルードされていないファイルで定義され、他のファイル(例えば リ ンクした場合)から参照できない(オブジェクトの)タグは、スコープがファイル内 (例えば static)に限られることが考慮されている。インクルードファイルの中に登 場しないタグは、ファイル内スコープ(のオブジェクト)と認識される。拡張子リ ストの先頭文字をプラス('+')記号にした場合、それらの拡張子は現在登録されて いる拡張子リストへの追加になる; それ以外は、現在のリストに置き換えて、拡 張子リストを登録する。--file-scopeオプションも参照。デフォルトの リストは".h.H.hh.hpp.hxx.h++.inc.def"である。拡張子リストを元に戻したい場 合は、"-h default"と指定すればよい。このオプションで登録した拡張子 が、特定の言語用にマッピングされていない (ソースファイル 参照)場合、 --langmap または --language-forceオプションも使う必要が ある。[".h.H.hh.hpp.hxx.h++"]

-I identifier-list
CとC++のソースファイルの解析中に特別に扱われる識別子を指定する。 このオプションは、プリプロセッサマクロを使用することで起こる特別な ケースを扱うために提供されている。リストアップした識別子がシンプルなも のであるとき、ソースファイルを解析する間、それらは無視されるだろう。識別子 の接尾辞に'+'をつけた場合、ctagsはソースファイル内で、識別子の直後に つづく(関数の)引数リストで')'カッコとじまでを無視するだろう。2つの識別子を の識別子と置き換えられる。識別子リストは、コマンドラインから直接指定するか、 セパレートファイルから読み込むこことで設定することができる。識別子リストの 先頭文字を'@'、 '.'、パス名の区切り文字('/' や'\')にしたり、最初の2文字を ディスクドライブ (例えば "C: ")の形式で指定した場合、identifier-list は ファイル名と解釈されて、そのファイルから入力行につき1つずつ識別子リストを読 み込む。それ以外の方法で指定した identifier-listは、識別子(または識別子 のペア)として特殊な扱いを受ける。識別子はそれぞれ、カンマか(識別子のリストが 1つのコマンドライン引数としてシェルに認識されるように、クォートで区切った場 合)スペースによって範囲が定められる。-Iオプションは、(1回の実行で)複 数回指定してもよい。無視する識別子のリストをクリアするには、 identifier-list にダッシュ ("-") を指定すればよい。

プリプロセッサ・マクロが構文的に混乱を 招くような使い方をされているときに、このオプションは便利である。ソースフ ァイル内で、通常のシンタックスを逸脱したマクロが使われている場合、このオ プションは本当に便利である(後述、CAVEATS参照)。この点について実例をあ げる。

int foo ARGDECL4(void *, ptr, long int, nbytes)

上記例では、"foo"という正当な名前の代わりに、ARGDECL4"マクロが関数名と 誤解されてしまう。-I ARGDECL4と指定すると、正しく解釈されるよ うになる。

/* RCSバージョン番号を文字列形式で作成する */
MODULE_VERSION("$Revision: 1.38 $")

上記例のマクロ呼出は、最後にセミコロンが付加されていないため、関数定義に 非常によく似ている(確かに、このグローバル変数の定義の仕方は、 K&Rスタイル の関数定義でのパラメータリストの宣言の仕方とほとんど同じである)。実際に (ctagsでは)これは関数の定義として扱われるため、定義が完了するまで、 ソースファイルの残りの部分はスキップされてしまう。-I MODULE_VERSION+と 指定することで、こういった問題を回避できる。

CLASS Example {

    // your content here
};

上記の例では、異なったプラットフォームで、違った形に展開されるプリプロセ ッサ・マクロとして"CLASS"が定義されている。例えば、Win32上では、 "class_declspec(dllexprot)"と定義されているかもしれないが、UNIXでは単純に "class"と定義されているかもしれない。通常、C++の予約語"class"が欠落してい ると、(ctagsでは) ソースファイルの解析が不正確になる。 -ICLASS=classと指定することで、ソースコードを正常に解析できるようになる。

-L file
tagsを生成するソースファイルのリストを file から読み込む。"-"がフ ァイル名に指定された場合、標準入力からソースファイル名を読み込む。このオ プションを使用した場合、コマンドラインで以降に続くファイル名はすべてソー スファイルのリストファイルとして扱われる。オプションも全て、リストファイ ルとして受け付けられる。このオプションが複数回指定された場合、最後に指定 されたもののみが有効である。Note: fileは、行指向で読み込まれ る。改行は唯一のデリミタであり、file 内にスペースを含む行があった 場合、ファイル名にスペースを含むソースファイルという意味で認識される。; これは、入力に含んでいた場合、オプションがどのくらい解析されるかというこ とに影響を及ぼす。

-n
--excmd=numberと同じ。

-N
--excmd=patternと同じ。

-o tagfile
-f tagfileと同じ。

-R
--recurseと同じ。

-u
--sort=noと同じ(i.e. "unsorted")。

-V
--verboseと同じ。

-w
このオプションは、SVR4 Unix版の古いctagsとの互換性を無視する。

-x
タグファイルを生成するかわりに、クロスリファレンス(xref)を標準出力に出力 する。出力情報には、タグ名; タグ種; 行番号, ソースファイル名, 定義行(スペ ースを圧縮して)が含まれる。タグファイルは出力されない。タグファイルを出力 する場合に影響のあるオプションはすべて無視される。このオプションに対する 例としては、ソースファイル内のすべての関数の定義位置の一覧を生成する場合 がある。(例えば ctags -x --c-kind=f file) 、 あるいはソースファイル内のグローバル変数の一覧を生成することもできる。 (例えば ctags -x --c-kind=v --file-scope=no file) このオプションはソースファイル 名よりも前に指定しなければならない。

--append[=yes|no]
指定されたファイルからタグファイルを生成する場合に、既存のタグファイルに新し いタグを追加するか、タグをすべて置き換えるか指定する。このオプションはデフォ ルトは OFFに設定されている。このオプションはソースファイル名よりも先に指定し なければならない。

--etags-include=file
fileで指定したファイルへの参照をタグファイルの中にインクルードする。こ のオプションは、必要な回数指定されるかもしれない。このオプションは 他のタグ ファイルを"includes"したタグファイルを使用するための、Emacs' の機能を支援する ためのものである。[etagsモードでのみ使用可能]

--exclude=[pattern]
pattern で指定されたパターンのファイルやディレクトリを除外リストに追加 する。このオプションは必要な回数指定されるかもしれない。ctags によって 考慮された各ファイル名において、このオプションで指定した、それぞれの pattern が パス名(例えば some/path/base.ext)と、ベースファイル名 (例えば base.ext) の両方に対して比較される。このように受け付けられたパターンは それがパス名かどうかに関係なく、与えられたファイル名、あるいは特定のパスにの みマッチする。もしCコンパイラのランタイムライブラリで、特定の機能をサポートし ている場合、pattern には、Unix共通の(正規表現ではない)シェルワイルド カード(ctags に渡される前に、シェルによって展開されないようにするため のクォートオプションパラメータを確認せよ、またワイルドカードはスラッシュ'/' にもマッチすることも認識せよ;)。--version オプションの実行結果によ り、ctags をインストールするプラットフォームで、シェルワイルドカードが 有効になっている場合、コンパイルされたフィーチャリストから"+wildcards"を含め るかどうかを選択することができる。またattern は、単純なテキスト比較を使 用したファイル名にもマッチする。

pattern が、'@' で始まる文字列の場合、除外するパターンを読み込むための ファイル名と解釈され、除外パターンが、そのファイルから一行につき一つずつ読み 込まれる。pattern が空の場合、 除外パターンのリストがクリアされる。プロ グラムの起動時には、デフォルトで"EIFGEN"、"SCCS"、"RCS"、"CVS" が除外パターン のリストに含まれている点に注意しなければならない。これらのディレクトリ名は通 常、--recurse オプションの処理中に、階層を下ることが求められることは ない。

--excmd=type
ソースファイル中のタグ位置にジャンプするためのEXコマンドのタイプを決定する。 [etags モードでは無視]

typeに指定できる有効値(単語全体または先頭文字が受け付けられる)は:

number
タグファイルでタグ位置を示すのに行番号のみ使用する。これには4つの利点が ある:
1.
タグファイルのサイズが大幅に小さくなる。
2.
タグを定義している行の変更により、パターンマッチングに失敗するような場合 でも、タグ検索の失敗を防ぐ(note vimなどのエディタなかには、このよう な場合を補足するものもある)。
3.
ソース行の間違った位置にマッチすることを防ぐ(後述、バグ参照)。
4.
ソースファイルの中で、一致する行に対するタグのエントリの区切りを保持する。 patternのモードで、重複する不要なエントリをctagsが生成したとき に、検索パターンの重複により、使用しないエントリをドロップする。

しかし、このオプションには重大な欠点がある:ソースファイルに対して変更が あった場合、ソースの行に相当しなくなった行番号がタグファイルに記録されて いる点である。このためターゲットの定義行にジャンプしたときに数行ずれて、 ジャンプするようになる。基本的にこのオプションはあまり変更されることがな いソースコードに対して、使用するのがベストである。このオプションのタイプ を選択した場合、以降の -BFオプションは無視される。

pattern
マクロ定義行は通常、行番号で検索されるが、すべてのタグについて検索パター ンのみ使用する。これはタグファイル生成後、ソースファイルに行を追加や削除 したときに、使えなくなった行番号参照を使用しないようにするのに有効である。

mixed
このモードでは、一部の例外を含めて、通常patternsが使用される。C言語では、 行番号はマクロ定義タグの検索に使用される。これはオリジナルctagsが 生成したデフォルトのフォーマットだった。そして、それゆえ、このオプション ではこのモードがデフォルトの設定となっている。Fortranでは、検索に使用し ないパターンを生成したときに、通常、番号に相当するソース行と一致するため、 行番号は共通ブロック用に使用される。

--extra=[+|-]flags
ある種の情報を保有する特別なタグを生成するかどうか指定する。パラメータフ ラグは、1文字のフラグのセットであり、それらはそれぞれタグファイルにエン トリされている特殊なタグの1種に相当する。'+'または'-'がflagよりも先に来 た場合、フラグが追加あるいは削除され、有効になったり; あるいは現在の設定 が置き換えられたりする。それぞれのフラグの意味は以下の通り:

f
ファイルの先頭行に宛てている、全ソースファイルのベースファイル(例えば "example.c")のエントリを含む。
q
クラス(現在のC++、Eiffel、Javaに見られる)のメンバに対するタグに、特 殊なアクセス制限を設定する。制限されたタグの実際の形式は、タグを生成し ているプログラミング言語に依存する(その言語で、アクセスがどれくらい制限 されているかという仕様にあわせて、もっとも自然な形式が使われる)。C++ では、"class::member"という形式が使われ; EiffelとJavaでは、 "class.member"という形式が使用される。これによって、タグファイルにタグ 名の重複が発生したとき、指定されたタグ位置に正確にジャンプできるように なる。 Note、しかしこのためにタグファイルのサイズが2倍以上になる可能性 がある。

--fields=[+|-]flags
タグファイルのエントリに含まれる有用な拡張フィールド(詳細は、後の TAG FILE FORMATを参照)を指定する。flagsパラメータは1文字のフラグ が設定され、それぞれ拡張フィールドの1種類を表す。以下に各フィールドの意 味を示す。(特に記述がない場合、デフォルトの設定では無効)

a
クラスのメンバのアクセス(またはエクスポート)
f
ファイルスコープ制限[有効]
i
継承情報
k
1文字でのタグの種別[有効]
K
フルネームでのタグの種別
l
タグが参照するソースファイルの言語
m
定義情報
n
タグが定義されている行番号
s
タグの定義のスコープ[有効]
S
ルーチンの書式(e.g. プロトタイプやパラメータリスト)
z
"kind:"種別フィールドのキーワードを含む

それぞれの文字またはグループ化した文字列を指定するのに、設定を有効にする 場合は前に'+'を付加し、逆に設定を無効にする場合には前に'-'を付加す る。'+'も '-'も付加されなかった場合、flagsリストに明記された種類の フィールドだけが出力される(すなわちデフォルトの設定が上書きされる)。このオ プションは、--format=1が指定された場合、無視される。このオプ ションのデフォルト値は fks である。

--file-scope[=yes|no]
1ファイルの中だけのスコープのタグ(すなわち "static" なタグのよう に、そのオブジェクトが定義されたファイルの外からは見ることができないタグ)を 出力すべきかどうかを指示する。-h オプションも参照。このオプションはデフォル トで有効となる。

--filter[=yes|no]
標準入力からソースファイル名を読み込み、タグをソースファイル毎に標準出力 に出力することで、ctagsがフィルタとして振舞う。もし --sorted オプションが有効だった場合、タグは定義されているソース ファイルの範囲内でのみソートされる。ファイル名は標準入力から、行志向の入 力モードで読み込まれ(-L オプションのnote参照)、コマンドラインでソースフ ァイルのリストを受け取ったときは、そのファイルが読み込こまれ、-L
 オプションでソースリストファイルを受け取ったときは、ソースリストファイ ルにリストされているソースファイルが読み込まれる。このオプションが指定さ れたとき、-f-o--totals オプションは無視される。 このオプションは非常に利用頻度が低く、デフォルトでは無効である。このオプ ションはファイル名よりも前に指定しなければならない。

--filter-terminator=string
--filter オプションを有効にしたとき、このオプションで、解析したそれぞ れのファイル名のあとに出力する文字列を指定することができる。それぞれのフ ァイルに対する出力の終了時に、ctags の出力を読むアプリケーションを 決めることができる。

--format=level
タグファイルの出力フォーマットを変更する。現在levelに指定できる有 効値は、12である。レベル1は、タグファイルにオリジナルの フォーマットを指定する。レベル2は拡張フィールド(ただし古いオリジナルの viとの互換性は維持されている)を含む拡張フォーマットを指定する。デ フォルトではレベル2が設定されている。このオプションは最初のソースファイ ルより前に指定しなければならない。[etags モードでは無視]

--help
詳しい使用方法の説明を標準出力に出力し、終了する。

--if0[=yes|no]
"#if 0" プリプロセッサ条件分岐内のコードをnon-macro tagsとして(macro tagsは常に含まれる)処理対象とするかどうかを指定する。この構成の意図は、 コードを無効にするものであるため、このオプションのデフォルトはnoで ある。Note これは好みを指定するだけで、"#if 0"分岐内のコードをスキップす ることが保証されるわけではない。tags生成時に使用されるfallbakアルゴリズ ムは、プリプロセッサ条件があまりにも複雑だったとき、すべての条件分岐をフ ォローするためである。このオプションはデフォルト無効である。

--jcode=[ascii|sjis|euc|utf8]
ソースファイルの文字コードを指定する。デフォルトはUnix系オペレーティング・ システムではeuc、Win32系ではsjisが設定されている。このオプションは日本語対 応版のみで使用することができる。

--<LANG>-kinds=[+|-]kinds
特定の言語に対して、出力ファイルに出力するためのその言語固有のタグのリス トを指定する。<LANG>は、大文字小文字の区別なく、ビルトイン言語名 (完全なリストは--list-languages参照)のひとつである。kinds パラメータは、出力ファイルに含むまたは除外する(言語固有の)タグの種別を示 す、1文字のフラグのグループである。フラグのセットの仕様は、それぞれの言語 ごとに認識され、それらの意味とデフォルトは、--list-kinds オプシ ョン使用時に一覧表示できる。それぞれの文字または文字グループの前に、デフ ォルトのセットに追加する場合 '+' 、削除する場合 '-' を付加することが できる。 '+'や'-'を省略してkindsがある場合、明示的に指定された種別 kinds だけがが出力に反映される(すなわち 指定された言語に対してデフ ォルトの設定に上書きされる)。

例としてC言語の場合、プロトタイプ宣言と外部変数宣言を、デフォルトのタグ 種別の設定に追加し、マクロを除外するために、 --c-kind=+px-dを使用すればよい; また関数のみのtagsを作 りたい場合、--c-kind=fを使用すればよい。

--langdef=name
正規表現で解析するための新しいユーザ定義言語を、nameで指定すること で定義する。一度定義されたnameは、言語名をとる他のオプションでも使 用することができる。このオプションの典型的な使用法は、はじめに言語を定義 し、それから--langmapを使用してファイル名をマッピングし、さらに tagsの検索方法を定義するために、--regex-<LANG>を使用して正規表 現を登録する、という方法である。

--langmap=map[,map[...]]
どういうファイル名が言語にマップされるかを制御する(--list-maps 参照)。それぞれカンマで区切られたmapは、言語名(ビルトインまたはユ ーザ定義言語)、コロン、ファイル拡張子またはファイル名パターンのリストか らなる。ファイル拡張子は、ピリオド付きで指定される(例えば ".c")。ファイル 名パターンは、パターンをカッコで囲んで指定する(例えば "([Mm]akefile)")。も しCコンパイラのランタイム・ライブラリで適当なサポートが有効ならば、ファ イル名パターンには、Unix共通のシェル・ワイルドカードを使うこともできる (ctagsに渡される前に、オプションパラメータが、シェルによって展開さ れないようにするには、オプションパラメータをクォートで囲めばよい)。シェ ル・ワイルドカードがご使用の環境で利用可能かどうかは、--version オプションのcompiled featureリストに、"+wildcards"が出力されるかを調査す るか; ファイル名パターンが、単純な本文比較を使用したファイル名と同様かど うかを調査することで知ることができる。

もしマップの最初の文字がプラスだった場合、マップ内の拡張子とファイル名パ ターンは、その言語に対する現在のマップに追加される; それ以外の方法ではマッ プは上書きされる。たとえば、拡張子に .c と .x がついたファイルのみCソー スファイルと扱うように指定するには、"--langmap=c:.c.x"を使 用する; .j という拡張子がついたファイルをJavaソースファイルとして扱うよ うにマップに追加したい場合、"--langmap=c:.c.x,java;+.j"と 指定すればよい。"make"と呼ばれる言語makefile(例えば "Makefile"または "makefile"あるいは、".mak"という拡張子をつけられて名づけられるファイル) をマップする場合、"--langmap=make:([Mm]akefile).mak"と指定 する。拡張子のないファイルをマップする場合、ピリオドを続けて指定する (例えば ".", "..x", ".x.")。特定の言語に対するマッピングをクリアする(その 言語に対するtagsの自動生成を抑制する)場合、空の拡張子リストを指定する (例えば "--langmap=fortran:")。すべての言語に対するマッピン グをデフォルトの設定にリストアするには、マッピングにキーワード"default" を指定して、"--langmap=default"とすればよい。Note ファイル の言語を推測するとき、ファイル名パターンよりもファイル拡張子が先にテスト される。

--language-force=language
デフォルトでは、ctagsは自動的にソースファイルの言語を選択し、言語 を特定できないファイル(ソースファイル参照)は無視する。このオプショ ンは、拡張子に基づいて自動的に言語を特定するのではなく、ソースファイルを 強制的にlanguageで指定された言語(大文字小文字の区別なく、ビルトイン またはユーザ定義)として扱う。その上、言語にautoを指定した場合、 自動選択(このオプションの効果を無効にする)となる。

--languages=[+|-]list
タグを生成する言語を指定する。カンマ区切りで言語名(大文字小文字の区別なく、 ビルトインまたはユーザ定義言語)をlistにリストアップすることで、タグの生成を有効にする 言語を指定する。listの先頭言語の前に'+'も'-'もついていない場 合、listで指定された言語の追加や削除操作が実行される前に現設定がす べてクリアされる。リスト中に'+'または'-'があった場合、それ以降に指 定された言語は、それぞれ現状のリストの設定に追加または削除される。このよ うに、指定されたリストで現状のリストを上書き、あるいは言語を追加や削除す ることで、リストは単純化される。tagsを生成するファイルのリストは、実際に は言語の拡張子のマッピングに依存する(--langmapオプション参照)。 Note ユーザ定義言語を含むすべての言語は、このオプションで明示的に無効に されるまで、有効のままである。listに含まれる言語名は、ビルトイン言 語でも、--langdefでこのオプションよりも前に定義されたユーザ定義 言語でもよい。デフォルトは、有効な引数として受け付けられたものすべてであ る。ビルトイン言語の一覧は、--list-languagesを参照。

--license
このソフトウェアのライセンスに関するサマリーを標準出力に出力して、終了する。

--line-directives[=yes|no]
"#line"命令を認識するかどうかを指定する。"#line"はプリプロセッサの出力に 存在し、プリプロセッサの出力が生成されたオリジナルのソースファイルの行番 号と、可能ならばソースファイル名を含む。このオプションが有効になったと き、ctagsは、プリプロセッサの実際の位置付けの代わりに、オリジナル のソースファイルのファイル名と行番号でマークされたタグのエントリを生成す る。オリジナルのソースファイルは、プリプロセッサの出力ファイルと関連性が あることを前提としているため、タグファイルに実際に記述されるファイル名は、 プリプロセッサ出力ファイルと同様にパス名が含められる(もちろん#line命令が、 絶対パスを指定していなければ)。このオプションのデフォルトはoffである。 Note: このオプションは一般的には、 --excmd=number(-n)オプションと併用したときのみ有益 である。ctagsがプリプロセッサ出力ファイルの拡張子を認識しないよう に--langmap--language-forceオプションを使用した場合も、 便利かもしれない。

--links[=yes|no]
シンボリック・リンク(もしサポートされていれば)をファイルとして認識するか どうかを指定する。このオプションを無効に指定した場合、シンボリック・リン クは無視される。このオプションはデフォルトはonに設定されている。

--list-kinds[=language|all]
指定された言語または全ての言語の認識されたtag種別を一覧表示し、終了する。tag ファイルに記録されている各tag種別は、1文字のフラグで表現される。 --<LANG>-kinds オプションを使用した出力に配置されているtagをフィルタ するためにも使用される。言語と/またはtag種別は、正規表現を使用して実装されて いるため、もしctagsのコンパイル時に正規表現がサポートされていなければ (--regex-<LANG>P オプション参照)、このオプションは無効であることに 注意してほしい。

--list-maps[=language|all]
指定された言語または全ての言語のソースファイル名に関連付けている拡張子とファ イル名のパターンを一覧表示し、終了する。--langmapソースファイ ルを参照。

--list-languages
ctagsが理解できる言語名の一覧を表示して、終了する。これらの言語名は、 大文字と小文字の区別がなく、--language-force--languages--<LANG>-kinds--regex-<LANG> オプションで使用できる。

--options=file
オプションをfileから読み込む。特別なケースとして、 --options=NONEがコマンドラインの最初のオプションに指定されてた 場合、ファイルや環境からの設定オプションの自動読み込みを無効にする(BFILESP 参照)。

--recurse[=yes|no]
与えられたソースファイルのリストにディレクトリがあった場合、そのディレク トリ内を再帰的に処理する。ソースファイルのリストが指定されなかった場合や、 -Lオプションでファイルリストが指定されなかった場合、カレント・ディ レクトリ(すなわち ".")を再帰的に処理する。シンボリック・リンクも処理される。 もしこれらの振る舞いを好まない場合、ファイル名を明示的に指定するか ctags -L-を使う代わりにfind(1)の出力をパイプすればよい。 Note:現在、このオプションはすべてのプラットフォームでサポートされ ているわけではない。--helpオプションの出力にこのオプションが含ま れていれば、このオプションを使用することができる。再帰制限については --excludeを参照。

--regex-<LANG>=/regexp/replacement/[kind-spec/][flags]
/regexp/replacement/のペアは、正規表現の置換パターンを定義する。 sedの置換コマンドに似たスタイルで定義することができ、 <LANG>(大文字小文字の区別なく、ビルトインまたはユーザ定義言語)に、 マップされた言語のソースファイルからtagsを生成するときに使用される。 regexpで指定した正規表現は、拡張正規表現(およそegrep(1)で使われる)を定義し、タグを含むソ ースファイルの位置を指し示すために使われる。タブ文字は\tを使うことで指 定してもよい。マッチする行を発見したとき、replacementで定義された 名前でタグが生成され、通常、regexでマッチしたsub-expressionグルー プを参照するために、スペシャル・バック-リファレンスとして\1から\9まで の番号が割り振られる。オプションのパラメータ内にある'/'は、区切り文字 で、実際には任意の文字で置き換えられる。Note 区切り文字をパターンのパラ メータの文字として使う場合は、バックスラッシュ('\')でエスケープしなけ ればならない。このオプションで定義された正規表現は、言語特有の正規表現リ ストに追加され、パラメータが省略されて、リストがクリアされない限り有効に 機能する。

flagsにより修正されない限り、regexpはPosix拡張正規表現として 解釈される。replacementは、マッチしたすべての行を空でない文字列に 展開する。また、警告メッセージが表示される場合もある。regexpにマッ チするタグを生成するために、replacementの後ろにkind指定子を付加す ることができる。これは、どのtag種別が"kind"拡張フィールド(TAGS FILE FORMAT参照)にレポートされるかを示す。フルフォームのkind-spec は、1文字、カンマ、名前(スペースなし)、カンマ、説明、をセパレータで区切った 形式である。種別の値と原文の説明(--list-kinds を使用して表示できる) を短縮形、フルスペルのどちらでも指定できる。種別と説明の両方またはどちらか を省略してもよい。 kind-specが省略された場合、デフォルトの設定値 "r,regex"が設定される。最後のflagsは、1つ以上の文字で構成され、 regexpの解釈に効果をもたらす:

b
パターンをPosix基本正規表現として解釈する。
e
パターンをPosix拡張正規表現として解釈する(デフォルト)。
i
正規表現が、その場面に応じた方法で適用される。

Note このオプションは、正規表現をサポートする環境で、ctagsがコンパ イルされたときのみ有効で、プラットフォームに依存する。コンパイルで正規表 現がサポートされているかどうかは、--versionオプションの出力を確 認することで知ることができる。コンパイル・フィーチャ・リストに"+regex"が 出力されれば、正規表現をサポートしている。

ctagsで使用している正規表現に関するもっと詳しい情報を得るには、 regex(5,7)のmanページか、GNU infoドキュメントのregex(例えば "info regex")を参照せよ。

--sort[=yes|no|foldcase]
タグ名でソートするかどうかを指定する(デフォルトはyes)。Note オリジ ナルvi(1)は、タグ名でソートされていなければならない。foldcase は、あいまい語で並べ替えを行うように指定する。case-foldingでソートされた タグファイルの最初の2分探索は、たとえばtags読み込みライブラリやVimの6.2 以降のバージョン("無視するケース"を設定したとき)を使用するなど、タグファ イルを使用するツールが特別な仕様をサポートしていなければならない。このオ プションはデフォルトでonが設定される。このオプションは最初のソースファイ ル名よりも前に指定しなければならない。[egagsモードでは無視]

--tag-relative[=yes|no]
コマンドラインから与えられたファイル名が、絶対パスで指定されていない限り、 タグファイルに記録されたファイルのパスを、カレント・ディレクトリからの相 対パスではなく、タグファイルのあるディレクトリからの相対パスになるように 指定する。このオプションは、最初のソースファイル名よりも前に指定しなけれ ばならない。デフォルトは、etagsモード(\オプションを参照)のとき yesに設定される。それ以外はnoに設定される。

--totals[=yes|no]
読み込み中のソースファイルとctagsの現在の処理内容の詳細を出力する。 このオプションはデフォルトではoffである。このオプションは最初のソースファ イル名より前に指定しなければならない。

--verbose[=yes|no]
冗長モードを有効にする。これはオプションの処理とctagsによって考慮 されているそれぞれのファイルについて取られている動作について、簡単なメッ セージを出力する。通常、ctagsは環境設定ファイル(ファイル参照)か らオプションとCTAGS環境変数を読み終わるまで、コマンドライン引数の 読み込みを行わない。しかし、このオプションがコマンドライン引数の先頭にあ った場合、環境設定ファイルや環境変数よりも先に読み込まれる。デフォルトは noが設定される。

--version
ctagsのバージョンを標準出力に出力し、終了する。このオプションの出力 には常に、"Exuberant Ctags"という文字列が含まれることを保証する。

 

OPERATIONAL DETAILS

ctagsは、それぞれのファイル名を順番に処理するため、順番に3つのテ ストを適用することによって、そのファイルの言語を識別しようとする: ファイ ル拡張子が、言語にマップされているか、ファイル名が、言語にマップされてい るパターンにマッチするか、最後にファイルが、実行可能でUnixスタイルの "#!"(プラットフォームでサポートされていれば)を行の先頭に指定しているか、 をテストする。言語が特定できれば、そのソースファイルを開き、そのファイル を操作するのに適当な言語パーサが呼び出される。パーサはファイルを解析し、 それぞれの言語のオブジェクトに対するエントリをタグファイルに追加する。 これらのエントリに関する詳細については、TAGS FILE FORMATを参照。

ctagsのこの実装では、Cコードが伝統的なフォーマットで記述されてい ることを強要することはない。ctagsの古い実装は、プリプロセッサ条件による コードのジレンマを解決するために、Cのコードが特定のフォーマットで記述さ れているという仮定を信頼する傾向がある

通常、ctagsは、プリプロセッサ命令による条件をスマートに解釈しよう とする。プリプロセッサ条件がタグを定義するステートメントの中にあった場 合、ctagsは、プリプロセッサの最初の分岐(ただし"#if 0"以外。この場 合最後の分岐のみ認識する)のみ認識する。このため、1つの分岐を追求しない ようにすることで、あいまいなシンタックスから結果を得ることができる。以下 に例を示す:

#ifdef TWO_ALTERNATIVES
struct {
#else
union {
#endif
short a;
long b;
}

両方の分岐をフォローすることはできない。またブレースがアンバランスなた め、ctagsはシンタックスを認識することができない。

もしアプリケーションがこの試行錯誤によって、適切なファイルの解析に失敗 したり、わかりにくかったり、条件内の解析が矛盾していたりする場合、 ctagsは、プリプロセッサ条件分岐をフォローしない別の試行でファイル の解析をやりなおすだろう。しかし処理を後戻りする代わりに、#if 条件分岐を フォローした結果として、ブレースがアンバランスとなったブロックの終端を示 すものとして、1カラム中のブレース閉じ("}")を信頼する。

Ctagsは、条件構造をフォローするために2重の丸カッコのセットで囲まれ た引数リストも特別に処理する:

extern void foo __ARGS((int one, char two));

"(("の直前にくる名前は自動的に無視され、その前の名前が使用される。

C++の演算子の多重定義は特別に扱う。演算子のすべての型(多重定義と変換) について一貫しているため、タグファイル内の演算子名は常に"operator"という 文字列が先に付加される(すなわち たとえ実際の演算子定義が"operator<<"と書かれ ていたとしても)。

タグファイルを生成または更新し、タグ名でソートしたあと、同一のタグ名を削 除する。

 

TAG FILE FORMAT

etagsモードではなかった場合、タグファイルのそれぞれのエントリは1行単位 で成立し、ほとんどの一般的なケースは、それぞれ以下のようになっている:

tag_name<TAB>file_name<TAB>ex_cmd;"<TAB>extension_fields

フィールドとこれらの行のセパレータは以下のように指定される:

1.
タグ名
2.
タブ文字1つ
3.
タグに関連するオブジェクトが定義されているファイル名
4.
タブ文字1つ
5.
ファイル内のタグにジャンプするときに使用するEXコマンド; 通常、検索パター ン(/pattern/または?pattern?)または行番号(--excmd参照)。タグファ イル・フォーマット2(--format参照)は、EXコマンドの直後に追加され たEXのコメントに組み込まれた拡張フィールド(後述)のセットを含む、ある状況 下のEXコマンドを拡張する。それはオリジナルのvi(1)の実装と互換性が ない。

内部的な目的で、タグファイルにはいくつかの特殊タグが挿入される。これらの タグは、常にファイルの先頭にソートされて記述される。それゆえ、これらのタ グの先頭2文字には、タグファイルを探知するためのマジックナンバが使われる。

Note それぞれのソースファイル名は、コマンドライン上で指定されたものと同 じ形式で、タグファイルに記録される。それゆえコマンドラインで指定されたパ ス名がカレント・ディレクトリからの相対パスだった場合、タグファイル内に記 録されるパス名も、カレント・ディレクトリからの相対パスとなる。しかし --tag-relativeオプションにより、この振る舞いを変更することがで きる。

拡張フィールドは、前述のとおり、コメントとしてEXコマンドの終端に追加した キー値のペアで、タブで区切られている。これらのキー値のペアは、通常 "key:value"というフォームで記述される。タグファイルにそれら を記述するかどうかは、--fieldsオプションで制御することができる。 ありうるキーとその値の意味は以下のとおり:

access
クラスのメンバのスコープを指定する。valueは言語に対して指定される。

file
ファイルスコープのタグを指定する。このキーは、対応する値を持たない。

kind
タグのタイプまたは種別を指定する。値は--<LANG>-kindオプション 以下で述べた1文字のフラグまたはフルネームに対応する。このフィールドのキー 部分は省略してもよい(実際、デフォルトでも省略される)。--fieldオ プションにより、振る舞いを制御することができる。

implementation
これはルーチンまたはクラスの限定的定義(抽象的 vs. 具体的)を指定する。 valueは言語ごと(C++では"virtual"または"pure virtual"、Javaでは "abstract")に指定される。

inherits
valueは、クラスの継承元の基底クラス(すなわち inherits from)のリストを カンマ区切りで記述される。

signature
valueは、ルーチンの書式の記述形式は言語依存する。ルーチンの書式の完全な 形式は、ルーチンの返却値型と正式な引数を指定する形式である。この拡張フィールド は、現在C言語ベースの言語だけでサポートされているが、内容には返却値型を含まな い。

さらに、タグ定義のスコープに関する情報は、言語に依存するオブジェクト名お よびプログラム内で宣言されたインスタンス名とともに利用できる。このスコー プのエントリはタグの検索時のスコープに指定される。たとえば、Cの構造体の メンバとして生成されたタグは、"struct:myStruct"のようなスコープをもつ。

 

HOW TO USE WITH VI

Viは、デフォルトではカレント・ディレクトリに"tags"という名前のタグファイ ルがあることを期待する。タグファイル生成後、タグジャンプに用いるコマンド を以下に示す:
vi -t tag
vi起動時に"tag"が定義されているファイルの行にカーソルを位置付ける。
:ta tag
タグを検索する。
Ctrl-]
カーソル位置の文字列のタグを検索する。
Ctrl-T
タグジャンプする前の位置に戻る(実装されていないこともある)。

 

HOW TO USE WITH GNU EMACS

Emacsは、デフォルトではカレント・ディレクトリに"TAGS"という名前のタグファ イルがあることを期待する。タグファイル生成後、タグジャンプに用いるコマン ドを以下に示す:
M-x visit-tags-table <RET> FILE <RET>
"FILE"により、タグファイルを選択する。 Select the tag file, "FILE", to use.
M-. [TAG] <RET>
TAGの最初の定義を検索する。デフォルトのタグは、現カーソル位置の文字列を 検索キーに使用する。
M-*
"M-."でジャンプする前の位置に戻る。
C-u M-.
最後にジャンプしたタグの次の定義を検索する。

コマンドについて、さらに詳しい説明はEmacs infoドキュメントのTagsを 参照。

 

HOW TO USE WITH NEDIT

NEdit バージョン5.1以降は、新しい拡張タグファイルフォーマットを扱うこと ができる(--format参照)。NEditでタグファイルを使用するには、 "File->Load Tags File"を選択する。タグの定義位置にジャンプするには、検索 したい単語で、Ctrl-Dを押下すればよい。NEdit 5.1は異なるディレクトリから 複数のタグファイルを読むことができる。タグファイル名をXリソースの nedit.tagFileに設定しておけば、NEditの起動時に自動的にタグファイルをロー ドするように指定することができる。

 

警告

ctagsは、プリプロセッサでもコンパイラでもないため、プリプロセッサ マクロの使用は、ctagsをだまして、タグの生成に失敗させたり、適切で ないタグを生成したりすること原因となる。ctagsは、ある共通のケース を取り扱うように設計されているけれども、これはレポートされている問題の最 大の原因である。特に、Cの原文のシンタックスを変更するプリプロセッサ構造 を使用すると、ctagsはだまされる。-Iオプションを使用すること で、こういった多くの問題に対処することができる。

スペースはファイル名と-Lオプションで指定されたリストファイルから 読み込まれたオプションの区切りとして扱われ、フィルタモード (--filterオプションを指定)のときに区切り文字として扱われる。それ ゆえ、ファイル名や他のオプションにスペース(複数スペース、etc)を含めて指 定することは、今のところ不可能である。

Note ctagsがタグを検索(--excmd参照)に使用するパターンを生 成するとき、もしタグを含む行と同一のソース行があった場合、不正な行がエデ ィタにより検出されるかもしれない。この条件をデモンストレーションした例を 以下に示す:

int variable;

/* ... */
void foo(variable)
int variable;
{

/* ... */
}

これは使用するエディタとコード中の場所に依存し、検索パターンからは、実際 のグローバル変数定義を見つける前に、foo()関数のローカル引数の宣言を発見 するかもしれない(検索パターンが同一になるため)。これは --excmd=nオプションを使用することで回避できる。

 

バグ

Ctagsには、ls(1)よりも多くのオプションがある。

C++のメンバ関数の定義を解析するとき(例えば "className::function")、 ctagsは、クラス名あるいは名前空間の指定子によるスコープを検出できない。 常に拡張フィールドのスコープ部分にクラス名としてそれをリストする。 C++の関数定義が、クラス宣言の外(よくありえる)にある場合、関数のもつアクセス 指定(すなわち public、protectedやprivate)と実装情報(e.g. virtual、 pure virtual)は、クラス内定義のときとちがって、認識されない。

クラス内で継承した言語のオブジェクトに対しては、タグの生成に制限はない。

 

環境変数

CTAGS
この環境変数が設定されている場合、この環境変数にはctagsの起動時、 ファイルに環境設定ファイルがリストされ、読み込まれた後、かつコマンド ラインオプションが読み込まれる前に、読み込まれるデフォルトのオプション のセットが設定されていることを期待する。コマンドラインでオプションが指定 されていた場合、この環境変数で指定されたオプションは上書きされる。この環 境変数からは、オプションのみ読み込まれる。Note この変数に設定されている すべてのスペースは、セパレータと認識され、スペースを使用してオプションの パラメータを設定することはできない。もしこれが問題である場合、代わりに環 境設定ファイルを使用しなければならない。

ETAGS
この変数は、前述CTAGS環境変数に似ている。この環境変数が設定されて いる場合、etagsの起動時に読み込まれる。もしこの環境変数が設定され ていなければ、etagsは代わりにCTAGS環境変数が読み込まれる。

TMPDIR
mkstemp()が有効なUnixライクなホスト上では、この変数の値は、テンポラリファ イルを保存するディレクトリを指定する。もしコンパイル時に決められたテンポ ラリディレクトリのデフォルトの領域サイズよりも、テンポラリファイルのサイ ズが大きくなりすぎた場合に、これは有用である。ctagsは、(1)emacsス タイルのタグファイル生成時、(2)タグファイルを標準出力に送るとき、(3)プロ グラムが、オペレーティング・システムのソート・ユーティリティの代わりに、 内部のソート・アルゴリズムを使用してタグファイルをソートするようにコンパ イルされているときにのみ、テンポラリファイルを生成する。もしオペレーティ ング・システムのソート・ユーティリティが使用される場合も、通常この変数の 値をチェックする。Note ctagsがユーザ識別を設定されていた場合、 TMPDIRの値は無視される。

 

ファイル

/ctags.cnf (MSDOS, MSWindowsのみ)
/etc/ctags.conf
/usr/local/etc/ctags.conf
$HOME/.ctags (MSDOS、MSWindowsでは、$HOME/ctags.cnf)
.ctags (MSDOS、MSWindowsでは、ctags.cnf)
もしこれらの環境設定ファイルがあった場合、それぞれctags起動時に、 CTAGS環境変数やコマンドラインオプションが読み込まれる前に、リス トされた順番でデフォルトのオプションの設定を含むことを期待される。これは サイトワイドに設定することが可能で、個人またはプロジェクトレベルでデフォ ルトに設定できる。追加の環境設定ファイルを先に読み込むように、 ctagsをコンパイルすることができる。この場合、--versionオプ ションで出力されるリストに、"custom-conf"が出力される。CTAGS環境 変数やコマンドラインで指定されたオプションは、この環境設定ファイルで指定 されたオプションで上書きされる。オプションのみこのファイルから読み込まれ る。Note オプションファイルは、スペースも意味のある文字と認識され、行志 向で読み込まれる(シェルのクォートが無効なため)。ファイル内の各行は、1つ のコマンドラインパラメータとして読まれる(シングル・クォートで囲まれてい れば)。それゆえコマンドライン引数を区切るには、改行を使用しなければなら ない。

tags
ctagsによって、デフォルトで生成されるタグファイル。
TAGS
etagsによって、デフォルトで生成されるタグファイル。

 

関連項目

Exuberant Ctags公式ウェブ・サイト:
http://ctags.sourceforge.net

日本語対応版ウェブ・サイト:

http://hp.vector.co.jp/authors/VA025040

ex(1)、vi(1)、elvisも参照。vimctagsの公 式エディタである。vimのさらなる情報は、ウェブ・サイトのVIMのページ を参照:

http://www.vim.org/

 

著者

Darren Hiebert <dhiebert@users.sourceforge.net>
http://DarrenHiebert.com/
 

著者(日本語対応版)

東 浩仁 <Twitter: @h_east>
http://hp.vector.co.jp/authors/VA025040
 

翻訳

寺田 隆平

 

MOTIVATION

"いつも全人類にサービスを提供することを望む。"

"人が心魂を尽くすあらゆる努力は、志向の動機に促され人類への奉仕の意欲に燃 えるものであれば、崇拝行為なのである。"

-- Baha'i より

 

CREDITS

ctagsのこのバージョンは元来、Steve Kirkendall <kirkenda@cs.pdx.edu>が開発したctagsに由来し、発案された。そしてそれは Elvis viクローンと同時に開発された(実質的にはオリジナルのコードはまった く残っていないけれども)。

Bram Moolenaar <Bram@vim.org>にも賛辞が送られる。vimの作者であり、 他の人々にサービスを提供するため、およびウガンダの孤児を救うために、相 当な時間とエネルギーが捧げられている。

"HOW TO USE WITH GNU EMACS"と題されたセクションは、ずうずうしくもGNU etagsのinfoページから引用した。


 

Index

名前
書式
説明
ソースファイル
オプション
OPERATIONAL DETAILS
TAG FILE FORMAT
HOW TO USE WITH VI
HOW TO USE WITH GNU EMACS
HOW TO USE WITH NEDIT
警告
バグ
環境変数
ファイル
関連項目
著者
著者(日本語対応版)
翻訳
MOTIVATION
CREDITS

This document was created by man2html, using the manual pages.
Time: 07:36:27 GMT, May 15, 2005