CTAGS(1)

名称
ctags - ex コマンド用のタグファイルを作る

書式
ctags [-BFadtuwvx] [-f tagsfile] name ...

解説
ctags は、C, Pascal, Fortran, yacc, lex, lisp のソースファイルから、 ex(1) コマンド用のタグファイルを生成するプログラムです。ファイルの種類に応じて関 数名やマクロ定義などのオブジェクトを与えられたソースファイルの中から捜 し出し、そのオブジェクト名、それが定義されているファイル名、そして、オ ブジェクト定義を検索するためのパタンの組を 1 行にして、タグファイルに出 力します。

オプションは以下のものがあります。

-B  逆方向の検索パタン (?...?) を使うようにします。

-F  通常の前方方向の検索パタン (/.../) を使うようにします。 デフォルトでは ctags はこのパタンを生成します。

-a  既存のタグファイルにアペンドします。

-d  引数を持たない #define もタグに含めます。 引数がある #define は、デフォルトでタグに含まれます。

-f tagsfile
    tagfile で指定されたファイル名で、タグファイルを生成し ます。このオプションが指定されない場合は、デフォルトで、 tags というファイル名でタグファイルを生成します。

-t  typedef, struct, union, enum 宣言のタグファイルを生成します。

-u  タグファイルの中で、指定のファイルに関する情報をアップデートし ます。アップデートは、まず、そのファイルに関する情報を全て削除 した後、新しい情報をアペンドする形で行います。(このオプションによる アップデートは遅いので、素直にタグファイルを 1 から作り 直した方が、大抵の場合、早いです。)

-v  vgrind(1) 形式のインデックスを標準出力に出力します。このリスト は、オブジェクト名、ファイル名、1 ページを 64 行と仮定した場合の ページ番号の各情報になります。出力は、辞書式の順番でソートされ ているので、この後に、 sort(1) を通した方がよいでしょう。次のように使います。

        ctags -v files | sort -f > index
        vgrind -x index

-w  警告メッセージを表示しないようにします。

-x  オブジェクト名、行番号、ファイル名、その行の内容からなるリストを、 標準出力に出力します。これは、各オブジェクトのインデックスとし て、人が見るのに利用できます。

ctagsが扱うファイルの種類は次の通りです。

ファイル名の最後が.c もしくは.h のファイルは、C 言語のソースファ イルと見なします。

ファイル名の最後が.y のファイルは YACC のソースファイルと見なします。

ファイル名の最後が.l の場合、空白以外で最初に出て来る文字が、`;' か `(' か `[' であれば、lisp のファイルとみなし、それ以外であれば、lex のファイルとみ なします。

他の場合は、ファイルの中身を調べ、まず、Pascal か Fortran の形式の定義を 捜し、なければ、C 言語形式の定義がないか調べて、言語を判定します。

C 言語の場合、 main は特別に扱われ、元のソースファイルの、パス名部分 と末尾の.c の部分を取り除いたファイル名に対し、その先頭に M を付加したものをタグファイルのファイル名とします。このため、 ctags は、同じディレクトリに複数のプログラムがある場合でも使えます。

yacc の場合、 yyparse は次のセクションの始まりとして、lex の場合、 yylex は次のセクションの始まりとして、それぞれ特別に扱われます。

戻り値
成功した場合は、0 を、エラーがおきた場合は、1 を返します。

関連項目
ex(1), vi(1)

関連ファイル
tags
    タグファイルが指定されていない場合に出力されるデフォルトのタグファイル名

バグ
FORTRAN と Pascal への対応は、十分ではなく、ブロック構造が扱えません。違う ブロックに同じ名前の手続きがあるだけで、ctags は扱えなくなります。 ソースファイルに文法的なエラーがある場合は、 ctags は正しく動作しませんが、 文法上正しくても、いくつかの構文では問題が起こります。例えば、現バージョン の ctags は #ifdef を扱えないので、 #ifdef の中に括弧の片側が入っている などして、全体の括弧の釣合が取れない場合、おかしくなります。

歴史
ctags コマンドは 3.0BSD から登場しました。