1. タグファイルの作成
ctags コマンドでタグファイルを作成する。
% ls cdmat.c fdump fdump.c fdump.h fline.c fread.c libSAMPLE.a makefile s.cdmat.c s.fdump.c s.fline.c s.fread.c % ctags *.c Duplicate entry in files s.cdmat.c and cdmat.c: cdmat (Warning only) Duplicate entry in files s.fline.c and fline.c: f_line (Warning only) Duplicate entry in files s.fread.c and fread.c: f_read (Warning only)
2. タグの参照
vi で fdump.c を開き、後半部分の f_read() 関数を呼び出している部分を探し、
関数名の上にカーソルを位置づける(この例では r に位置づけられている)
% cat tags
Mfdump fdump.c /^main (argc, argv)$/
Ms.fdump s.fdump.c /^main (argc, argv)$/
cdmat cdmat.c /^char cdmat(code)$/
f_line fline.c /^void f_line(array)$/
f_read fread.c /^int f_read(fid,buff)$/
% vi fdump.c
:
:
for(;;){
printf("%04X | ",count );
ret = f_read( fid, line );
f_line( line );
if( 0 == ret ){
break;
}
count += WIDTH;
}
fclose( fid );
}
↓(Ctrl)+] を押す
#include "fdump.h"
char freadVER[]=" %W% %D%,%T%";
int f_read( fid, buff )
FILE *fid;
char *buff;
{
int ret,i;
:
:
f_read()を定義している fread.c がバッファに読み込まれ、該当位置にカーソルが移動します。
この例ではC言語でしたが、ctags は数多くの言語に対応しています。
$ ctags --list-languages Ant Asm Asp Awk Basic :PHP を使った例を以下に示します。 --langmap で使用する言語を指定し、:+ でファイルの拡張子を追加しています。
$ ctags --langmap=PHP:+.inc
$ cat tags
bdr_header common.inc /^function bdr_header( $t1, $t2, $lang="ja", $scsw=0 ) $/;" f
bdr_headerI18N common.inc /^function bdr_headerI18N( $msgid, $lang, $scsw=0)$/;" f
bdr_headerLight common.inc /^function bdr_headerLight( $t1, $t2 ) $/;" f
bdr_session common.inc /^function bdr_session()$/;" f
bdr_top common.inc /^function bdr_top() {$/;" f