Vim でタグジャンプを使ってみる

/web/tool

Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。

C-] カーソル位置の単語をタグとみなしてジャンプ。
C-t 直前のタグに戻る。
g C-] 複数候補がある場合に選択→ジャンプ。
C-w } カーソル位置の単語の定義を、プレビューウィンドウで開く。
C-w C-z プレビューウィンドウを閉じる。(:pcと同じ)

ctagsは、さまざまな言語のソースファイルから関数やオブジェクトの索引を生成するツール。多くのエディタが ctags のインデックス(tag)ファイルをサポートしていて、Vim や Emacs でも使えます。タグジャンプ機能を使えば、ソースファイル中の気になる関数や変数の定義位置へサクッとジャンプすることができます。複雑なライブラリや共同開発の場面において、とても便利な機能です。

Vimにおけるキーバインドは上記の通り。タグファイルの生成と指定方法は以下に。Win32版のインストールはこちら。ほとんどのUnixシステムには最初から入っているけど、たとえばDebianなら 「apt-get install ctags」でいけます。

$ ctags *.c
カレントディレクトリのすべての C ファイル(*.c)からタグを生成する
$ ctags -f ~/.tags -R /home/www/
「/home/www/」以下の全てのファイルから、「~/.tags」にタグファイルを生成する。
fオプションで生成ファイルを指定。Rオプションで解析対象ディレクトリを指定。
:set tags=~/.tags,/home/user/commontags
使用するタグファイルを指定。「,」で複数指定可能
これを.vimrcに記述しておけば、「vim -t tag」で起動時にタグまでジャンプできる。

memo: たいていのLinuxにインストールされる ctags は etags(Exuberant Ctags)で、多くの言語に対応している。Mac OSXに付属している ctags はBSD由来のもので、-Rオプションが使えなかったりする。BSD由来の ctags はほぼC専用とのこと。

memo: Googleが提供する Google Tags (GTags) なんてのもあり。導入はちょっとメンドイけど、かなり速いみたい。

おまけ

:tselect 現在のタグの一覧を表示
:tfirst (タグが重複している場合)最初のタグへ
:tn (タグが重複している場合)次のタグへ
:tp (タグが重複している場合)前のタグへ
:tlast (タグが重複している場合) 最後のタグへ
:tags 移動経路を確認
:tag タグリストの前方にジャンプ。(:3tagなども可)
:tag [タグ名] 指定したタグにジャンプ。(:taと同じ)
:ptag [タグ名] [タグ名]の定義をプレビューウィンドウで開く。

参照

p.s. なんだかんだでそこまでハードユーザじゃないので、突っ込み歓迎!

Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。

3 Comments

road wrote:
tagsはほとんどC-[とC-tしか使わないので実はさっぱりだったり。

おまけあたりのタグが酷いことに/(^o^)\ 2008–03–08 16:50
Sig. wrote:
うわぁぉ、俺としたことがなんて単純なミスを^^;
いつもありがとう。修正しときました~!

ctags便利だけど、あんま使う機会ないです。
まだテンプレ用の値を用意したりとか、簡単なサブルーチンやSQL文を用意したり
...くらいしかやってないからでしょうね。

オブジェクト指向な開発では凄く便利そうだけども。Javaとか? 2008–03–08 17:20
road wrote:
>オブジェクト指向な開発では凄く便利そうだけども。Javaとか?
たしかに。何が面倒くさいって、クラスを探すのが面倒くさい!
PHPはRubyのフレームワークなんかも大体オブジェクト指向で出来てて、
とにかくあちこちに散らばってるのでクラスを特定するだけでも大変だったり。

たしかに便利だけど、やっぱり不要な人には不要かもですねw 2008–03–12 15:19