2011-02-12
etags の使い方メモ
概要
emacs では, あらかじめ関数定義をタグテーブルにまとめておくことで, 関数定義元ファイルの検索を容易にすることがきる.
この機能は etags.el で実装されている.
以下, emacs manual の内容を適当に要約して, 少し加筆したものをメモしておく.
参考サイト
- http://www.geocities.co.jp/SiliconValley-Bay/9285/EMACS-JA/emacs_270.html#SEC271
- http://www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html#Tags
タグテーブルの作成
etags コマンドを使うことで TAGS という名前のタグテーブルが生成される.
$ etags *.el
etags コマンドに複数のファイル名を渡せば, すべてのファイルの情報をもった1つの TAGS ファイルが生成できる.
emacs 内でのタグテーブルの管理
emacs はタグテーブルのリスト tags-table-list をもっており, リストの中から現在選択しているタグテーブルのファイル名を変数 tags-file-name に格納している.
tags-file-name は検索開始ファイルを表し, tags-table-list は検索するタグテーブルのリストを表す.
後に示す find-tag 等のタグ検索コマンドを実行した際は, tags-file-name で指定されるファイルから検索を開始し, tags-table-list 内のファイルを順番に1周して, すべてのファイルを検索する.
タグテーブルの選択
タグテーブルを変更する場合は M-x visit-tags-table を実行すればよい.
M-x visit-tags-table を実行すると, タグテーブルのファイル名を聞かれる.
タグテーブルのファイル名として tags-teble-list に含まれるものを指定した場合は, 単に tags-file-name の値が変更され, 検索開始位置が変更される.
一方, M-x visit-tags-table で新しいファイル名を指定すると,
Keep current list of tags tables also? (現在のタグテーブルリストを保持しますか?)
と質問される.
yes と答えると, 現在の tags-table-list が保持され, 新たに指定したファイル名が tags-table-list に追加される.
tags-file-name は新しく指定したファイル名を指すようになる.
no と答えると, 現在の tags-table-list を破棄し, 新しく指定したタグテーブルのみを含むリストが tags-table-list に格納される.
tags-file-name は当然新しく指定したファイル名を指す.
タグテーブルリストを事前に指定
tags-table-list にあらかじめ, 検索するタグテーブルを登録しておくと便利.
(setq tags-table-list '("~/emacs" "/usr/local/lib/emacs/src"))
とすると, ~/emacs/TAGS と /usr/local/lib/emacs/src/TAGS が登録される.
tags-table-list に登録するファイル名は, TAGSを含むディレクトリ名でも, TAGS 本体でもどちらでもよい. すなわち,
(setq tags-table-list '("~/emacs/TAGS" "/usr/local/lib/emacs/src/TAGS"))
でもよい.
ディレクトリ名で指定した場合は, etagse.el 内の関数 tags-expand-table-name が後ろに TAGS を付けたものに変換している.
また, tags-expand-table-name はパスの展開も行ってくれるので, パスの指定も上記のように相対パスでもよい.
emacs の標準関数の TAGS ファイルを作成
emacs の Makefile には TAGS の生成ルールが用意されているので, emacs に標準で含まれている関数の TAGS ファイルを生成するには, Makefile を含むディレクトリで,
$ make tags
を実行すればよい.
./src 以下に, TAGS と TAGS-LISP というファイルが生成される.
TAGS が C の関数のタグファイル. TAGS-LISP が LISP の関数のタグファイル.
TAGS-LISP は TAGS 内でインクルードされているので, tags-table-list には TAGS のみを登録すればよい.
etags のコマンド
使いそうなコマンドだけメモ.
find-tag
M-. に find-tag が割り当てられている.
前置引数を変えると, 前方に検索したり, 後方に検索したりできる.
- M-. tag <RET>
- `tag' で指定した関数定義を探す.
- C-u M-. (M-0 M-.)
- 前回検索したタグの次の候補を探す.
- C-u - M-. (M-- M-.)
- 前回検索したタグの前の候補を探す.
find-tag-regexp
- C-M-. pattern <RET>
- 正規表現でタグを探す.
次のタグを探すときは, find-tag と同様 "C-u M-." を使う.
pop-tag-mark
- M-*
- 最後に find-tag を起動した位置に戻る.
- 4 http://www.google.co.jp/search?hl=ja&biw=960&bih=833&&sa=X&ei=3SZiTbHSCImiuQPvpoXnCA&ved=0CBcQBSgA&q=etags+標準関数&spell=1
- 3 http://www.google.co.jp/search?q=etags+使い方&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox-a
- 2 http://k.hatena.ne.jp/keywordblog/emacs
- 2 http://practical-scheme.net/wiliki/rssmix.cgi
- 2 http://www.google.co.jp/reader/view/
- 2 http://www.google.co.jp/search?hl=ja&biw=960&bih=833&&sa=X&ei=HyRiTa75AYvYuAOG1qCdDw&ved=0CBcQBSgA&q=etags+標準関数&spell=1
- 1 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/tama_sh/20110206/1296976730
- 1 http://b.hatena.ne.jp/sonota88/Emacs/
- 1 http://d.hatena.ne.jp/keyword/Emacs
- 1 http://www.delicious.com/tag/emacs