etags (ctags for Emacs)の利用†
tag の生成†
- まずは、 Tag file を生成する。emacs パッケージには etags.emacs** なコマンドが付属している場合があるので、それがあればそちらを使う。
- Tag file は TAGS というファイル名で生成される。
$ etags.emacs23 `find | grep -i "\.c$\|\.cc\|\.cpp$\|\.cxx$\|\.h$"
- ただ、ファイル数が多い場合にはコマンドラインバッファの上限を超えてしまい、全てのファイルを処理できないことが予想される。この問題は xargs を使って解消することが出来る。
以下に、そのためのスクリプトを示す。
下記の例では、 xargs の -P オプションも併用し、マルチスレッドで動作するようにしている。 THREAD_NUM は CPUの数もしくは Core 数に合わせる。
#!/bin/bash
TAGS_FILE=TAGS
CMD_ETAGS=etags.emacs23
THREAD_NUM=4
rm -f ${TAGS_FILE};
find | grep -i "\.c$\|\.cc\|\.cpp$\|\.cxx$\|\.h$" | xargs -P ${THREAD_NUM} -I {} ${CMD_ETAGS} -a {} # 対象となるソース・ヘッダを etags に引数で渡す
- 全てのファイルを渡すのにコマンドバッファが足りなくなってしまう場合(=ファイル数が多い場合や個々のパス名が長い場合など)でも全てのファイルを渡せるよう、xargs を使って etags にファイル名を渡すようにしている。
- コマンドバファが足りなくなった場合、 xargs は複数回 etags を呼ぶ。この場合、 etags が append モードで動作しないと etags は呼ばれる度に TAGS ファイルを上書きしてしまうので注意すること(そのため上記では append モードにするため "-a" を付けて etags を呼んでいる)。
emacs に TAGS ファイルを読みこませる†
M-x: tags-reset-tags-tables 一旦リセットする
M-x: visit-tags-table 明示的に TAGS ファイルを読み込む
- emcs から操作する(下記)
Key binding | command | description |
M-. | find-tag | クラスや関数を探す |
C-u M-. | | 次の検索結果候補を表示する |
C-u – M-. | | 前の検索結果候補を表示する |
M-* | | 元の場所に戻る |
C-x 4 . | find-tag-other-window | タグ(名前)の定義箇所を探し別ウィンドウに表示 |
C-x 5 . | find-tag-other-frame | タグ(名前)の定義箇所を探し別フレームに表示 |