ctags

超Quick Start

参考:

雑に次のようなソースコード

input.c

#include <stdio.h>
static boolean debug;
#include DEBUG(X) (debug=X)
struct point2d {int x, y;};
typedef struct point2d *pp;
int distance (pp p0, pp p1) { /* ... */}
int main (int argc, char** argv) {
  int local;
/* ... */
  goto_label:
  return 0;
}

tagsの出力例

$ ctags -o - input.c
debug input.c /^static boolean debug;$/;" v file:
distance input.c /^int distance (pp p0, pp p1) { \/* ... *\/}$/;" f
main input.c /^int main (int argc, char** argv) {$/;" f
point2d input.c /^struct point2d {int x, y;};$/;" s file:
pp input.c /^typedef struct point2d *pp;$/;" t typeref:struct:point2d file:x input.c /^struct point2d {int x, y;};$/;" m struct:point2d file:
y input.c /^struct point2d {int x, y;};$/;" m struct:point2d file:

こんな感じでタグリファレンス?用のデータベースファイルが生成される. -o - で標準出力に出力する.

通常の使い方では,トップディレクトリで以下のように実行する.

$ ctags -R

tagsというファイルが生成されている. ここで例えばシンボル名?を指定して次のようにvimを起動する.

$ vi -t debug

するとそのシンボルにカーネルが合ってvimが起動されているはず.