Vimでシステム開発
蒋 いつ峰 2008/06/12   |  開発色々
4.tagファイルとtaglistプラグイン(その1) 2008/06/12  |  PK:vim tag タグ

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を使います。

:tag VimMain

すると、Vimは src/main.c がオープンし、カーソルを167行のVimMainに移動しました。
vim tag


タグにジャンプした後まだ元のところに戻れるように、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

閲覧  |  コメント  |  目次

 
ヘルプ  |  ご利用規約  |  相互リンク  |  問合せ
リンクはご自由に、問合せはお気軽に
©2007 Uprush