1.Tag ファイル
プログラミングにおいて、Tagファイルは強力なツールでしょう。Tagファイルがあれば、Vimで関数の呼出す関係、クラス、マクロの定義が簡単に見れるし、タグ間の移動も楽にできます。Eclipseの経験がある方はこういった機能は慣れていると思いますが、Vimではこれはtagファイルによって実現できています。
ソールのtagファイルの内容について、関数、クラス、マクロなどの名称、定義するファイル名、及びタグへ移動用のExスクリプトなどが含まれます。Tagファイルはテキストファイルなので、手動で編集、またはスクリプトで操作できます。
Tagファイルの生成は普段ctagsというツールを使います。Vimはctagsが生成したtagファイルを直接利用できますが、Unixのctagsは比較的に機能が少ないため、Exuberant Ctags(殆どのLinuxは、これがデフォルトのctagsツール)を利用するのは一般です。Exuberant Ctagsは33種類のプログラミング言語も対応するから、私たちのニーズは十分対応できるでしょう。Exuberant Ctagsは http://ctags.sourceforge.net からもダウンロードできます。
Emacsの場合は、etagsを使ってtagファイルを作成します。Vimでもetagsのtagファイルを対応したいのであれば、Vimをコンパイル時「+emacs_tags」オプションを入れる必要があります。
2.Tag ファイルのフォーマット
後の文章で紹介するlookupfileプラグインは、自分用のtagファイルを作りますので、ここでtagファイルのフォーマットを先に説明します。
Tagファイルはフォーマットされたファイルです。Exuberant Ctagsいり生成されたtagファイルは、デフォルト下記のフォーマットとなっています。
{tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..
| {tagname} |
タグ名。例えば関数名、クラス名、マクロ名など。タブ(\t)を含んではならない。 |
| {tagfile} |
{tagname}が含まれたファイル名。タブを含んではならない。 |
| {tagaddress} |
{tagname}へジャンプ用Exコマンド |
| {term} |
「;"」です。Viと交換性を保持するため、Viがその後の{field}を処理しないように。 |
| {field}.. |
オプション項目です。{tagname}のタイプを表します、例えば関数、クラス、マクロなど。 |
{tagname}、{tagfile}と{tagaddress}の間、タブ(\t)で区切るため、{tagname}と{tagfile}はタブを含んではならない。
「!_TAG_」から始まる行はメタ情報です、例えば「_TAG_FILE_SORTED」。
!_TAG_FILE_SORTED<Tab>1<Tab>{anything}
上記メタ情報の意味は、tagファイルは大文字と小文字を区別でソートされたことを示します。ソートされたtagファイルの走査は早くなります。また、「0」はソートされていない、「2」は大文字と小文字を区別なくソートされています。
3.Tag の使い方
ctagsは色んなオプションを持っていますが、使い方は凄く簡単。Vim 7.1のソースを例とします。以下のコマンドを実行します。
cd ~/src/vim71
ctags -R src |
上記コマンドは、~/src/vim71 フォルダの直下にtagsという名前のtagファイルを生成します。このファイルは、~/src/vim71/src の下の全ての.c、.hファイルのタグが含んでいます。tagsはテキストファイルで、Vimで開いた見ることができます。生成されたタグはデフォルト大文字と小文字を区別してソートされ、Vimから直接利用できます。
tagsができましたら、Vimを起動して、下記コマンドを実行します。
:cd ~/src/vim71 "作業フォルダを~/src/vim70 に切替
:set tags=tags "tagsオプションを作業フォルダにあるtagsファイルに設定 |
これで、tagsの設定ができました、次はtagを使います。
すると、Vimは src/main.c がオープンし、カーソルを167行のVimMainに移動しました。

タグにジャンプした後まだ元のところに戻れるように、Vimはジャンプしたタグのスタックを持っています。「:tags」コマンドでスタックの現在の位置を確認できます。
よく使うtagコマンドは下記の通りです。
| :tag {ident} |
指定されたタグへジャンプ |
| :tags |
タグスタックを表示 |
| CTRL-] |
カーソルにあるタグへジャンプ |
| CTRL-T |
一つ前のタグへジャンプ |
ほかのコマンドは「:help 29.1」を参考してください。
tagと関連知識の詳しくは「:help tagsrch」
== 関連ヘルプ ==
:help ’tags’
:help :tag
:help :tags
:help CTRL-]
:help CTRL-T |
|