*tagsrch.txt*   For Vim バージョン 7.3.  Last change: 2011 Oct 28


		  VIMリファレンスマニュアル    by Bram Moolenaar


タグと特別な検索					*tags-and-searches*

初めにユーザーマニュアルのセクション|29.1|を参照すること。

1. タグへのジャンプ		|tag-commands|
2. タグスタック			|tag-stack|
3. タグマッチリスト		|tag-matchlist|
4. タグの詳細			|tag-details|
5. タグファイルの書式		|tags-file-format|
6. インクルードファイルの検索	|include-search|

==============================================================================
1. タグへのジャンプ					*tag-commands*

							*tag* *tags*
タグとは "tags" ファイルに現われる識別子である。タグはラベルのようなものであ
り、そこにジャンプすることができる。例えば: Cのプログラムではそれぞれの関数名
をタグとして使うことができる。タグ機能を使う前には、ctagsのようなプログラムに
よって "tags" ファイルを生成しなければならない。

":tag" コマンドはカーソルをタグ上に移動する。CTRL-]コマンドはカーソルの下にあ
るキーワードをタグとして使用する。もしカーソルがキーワード上になければ、カーソ
ル位置から右側で最初に現れるキーワードを使用する。

":tag" コマンドはCプログラムでよく機能する。もし関数呼び出しを見つけた時にその
関数が何をするのか疑問に思ったら、カーソルを関数名の上に置いてCTRL-]を叩けばよ
い。これで関数定義に導いてもらえるだろう。簡単に戻る方法はCTRL-Tコマンドを使う
ことである。後述するタグスタックについても読むとよい。

						*:ta* *:tag* *E426* *E429*
:[count]ta[g][!] {ident}
			tagsファイル内の情報を用いて、{ident}の定義へジャンプ
			する。{ident}はタグスタックに積まれる。[!]については
			|tag-!|を参照。
			{ident}は正規表現を使用できる。|tag-regexp|を参照。
			{ident}に対してマッチするタグが複数ある場合、[count]番
			目のタグへジャンプする。[count]が指定されないときは最
			初のタグへジャンプする。他のマッチするタグへジャンプす
			るには|tag-matchlist|を参照。

g<LeftMouse>						*g<LeftMouse>*
<C-LeftMouse>					*<C-LeftMouse>* *CTRL-]*
CTRL-]			カーソルの下のキーワードを定義している場所にジャンプす
			る。":tag {ident}" と同様であるが、{ident}はカーソルの
			下、もしくは次に現われるキーワードである。
			{ident}に対してマッチするタグが複数ある場合、[count]番
			目のタグへジャンプする。[count]が指定されないときは最
			初のタグへジャンプする。他のマッチするタグへジャンプす
			るには|tag-matchlist|を参照。
			{Vi: identifier after the cursor}

							*v_CTRL-]*
{Visual}CTRL-]		":tag {ident}" と同様であるが、{ident}はハイライトされ
			ているテキストである。{Vi にはない}

							*telnet-CTRL-]*
CTRL-]はtelnetの標準エスケープキーである。タグにジャンプしようとCTRL-]を打つと、
代わりにtelnetのプロンプトが立ち上がるだろう。telnetのたいていのバージョンは、
標準エスケープキーを変更、もしくは使用不可能にできる。telnetのマニュアルを参照
すること。エスケープキーを使用不可能にするには 'telnet -E {ホスト名}'、エスケー
プ文字を他の文字にするには 'telnet -e {エスケープ文字} {ホスト名}' を使用する。
もし可能ならtelnetの代わりにsshを使うことで、この問題を回避できる。

							*tag-priority*
タグのマッチが複数ある場合、以下の優先度が使われる:
1. "FSC"  カレントファイル内の全一致するstaticタグ。
2. "F C"  カレントファイル内の全一致するglobalタグ。
3. "F  "  別のファイル内の全一致するglobalタグ。
4. "FS "  別のファイル内の全一致するstaticタグ。
5. " SC"  カレントファイル内の大文字、小文字を無視した一致をするstaticタグ。
6. "  C"  カレントファイル内の大文字、小文字を無視した一致をするglobalタグ。
7. "   "  別のファイル内の大文字、小文字を無視した一致をするglobalタグ。
8. " S "  別のファイル内の大文字、小文字を無視した一致をするstaticタグ。

カレントファイルが変わっても、優先度のリストはほとんどの場合変化しないので注意
すること。これは ":tnext" を使うときの混乱を避けるためである。優先度のリストは
":tag {ident}" を使ったときに変化する。

'ignorecase' オプションがオフになっているときの ":tag" コマンドでは、大文字、
小文字を区別しないマッチは見つからない。'ignorecase' がオフになっていても、
("/" で始まる) パターンを使用し、かつ ":tselect" を使ったときには見つけること
ができる。大文字、小文字を区別しないタグ検索を使うと、tagsファイル内で二分探索
ができなくなるため処理が遅くなる、ということに注意すること。これはタグファイル
を大文字と小文字を区別せずにソートすることで回避できる。'tagbsearch' オプショ
ンの説明も参照のこと。

==============================================================================
2. タグスタック				*tag-stack* *tagstack* *E425*

タグスタック上にはジャンプ先のタグと、どこから来たのかという情報が記憶される。
タグは 'tagstack' オプションが設定されているときにだけ積まれる。

g<RightMouse>						*g<RightMouse>*
<C-RightMouse>					*<C-RightMouse>* *CTRL-T*
CTRL-T			タグスタック中の[count]分だけ古いエントリにジャンプす
			る(デフォルトは1)。 {Vi にはない}

						*:po* *:pop* *E555* *E556*
:[count]po[p][!]	タグスタック中の[count]分だけ古いエントリにジャンプす
			る(デフォルトは1)。
			[!]については|tag-!|を参照。 {Vi にはない}

:[count]ta[g][!]	タグスタック中の[count]分だけ新しいエントリにジャンプ
			する(デフォルトは1)。
			[!]については|tag-!|を参照。 {Vi にはない}

							*:tags*
:tags			タグスタックの内容を表示する。現在のエントリは '>' で
			マークされる。 {Vi にはない}

":tags" の出力は以下のようになる:

   # TO tag      FROM line  in file/text
   1  1 main		 1  harddisk2:text/vim/test
 > 2  2 FuncA		58  i = FuncA(10);
   3  1 FuncC	       357  harddisk2:text/vim/src/amiga.c

このリストはジャンプ先のタグとジャンプ前のカーソル位置を表示する。上から順に古
いタグが並び、一番下が最も新しいタグである。

'>' は現在のエントリを指している。これは次の ":tag" コマンドで使われるタグであ
る。CTRL-Tと ":pop" コマンドは１つ上のタグを使う。

"TO" の列にはマッチリスト中の現在のマッチ数を表示する。これは ":pop" や ":tag"
を使っても変化しないので注意すること。

行番号とファイル名は、タグコマンドを実行する前にいた位置に戻ることができるよう
に記憶される。行番号は行の削除や挿入が行われた時にも正しく維持される。ただし、
別のプログラム(例えば、Vimの別インスタンス)で編集した場合を除く。

ジャンプ前の位置がカレントファイル内であれば、"file/text" の列にその行が表示さ
れる。インデントは取り除かれ、長い行はウィンドウに収まるように切り詰められる。

前に使ったタグにジャンプするコマンドはいくつかある。例えば:

	":pop" or CTRL-T	ひとつ前に使われたタグにジャンプする。
	{count}CTRL-T		{count}分だけ前のタグにジャンプする。
	":tag"			現在のエントリより新しいタグにジャンプする。
	":0tag"			最後に使われたタグにジャンプする。

これらの最も明白な利用方法は、プログラムの関数呼び出しをあちこち拾い読みすると
きである。次のような呼び出し図を考える:

	main  --->  FuncA  --->  FuncC
	      --->  FuncB

(解説: mainはFuncAとFuncBを呼び出し、FuncAはFuncCを呼び出す)。
FuncAの呼び出し部分の上でCTRL-]を使うことによって、mainからFuncAに行くことがで
きる。同様にCTRL-]を使ってFuncCへ行くことができる。mainに戻るにはCTRL-Tを２回
使う。そこでCTRL-]を使ってFuncBに行くことができる。

":ta {ident}" やCTRL-]コマンドは、タグスタック上の現在の位置にタグを追加する。
もしスタックが満たされていた場合(スタックは20エントリまで保持できる)、最も古い
エントリが削除され、古いものから順にひとつずつ上に移動する(インデックス番号は1
ずつ減る)。もし最後に使われたエントリが一番下になかった場合、最後に使われたエ
ントリより下にあるものは削除される。つまり古いタグ経路は失われる。上のパラグラ
フの説明を実行したあとのタグスタックは次のような状態になる:

   # TO tag	FROM line  in file/text
   1  1 main		1  harddisk2:text/vim/test
   2  1 FuncB	       59  harddisk2:text/vim/src/main.c

							*E73*
タグスタックを使おうとしたとき、タグスタックに何も入っていないとエラーが表示さ
れる。

==============================================================================
3. タグマッチリスト				*tag-matchlist* *E427* *E428*

以下のコマンドは複数のタグがマッチしたときに、タグの間を移動するために使うこと
ができる。これらのコマンドはタグスタックを変更せず、同じエントリを保つことに注
意すること。

							*:ts* *:tselect*
:ts[elect][!] [ident]	タグファイルの情報を用いて、[ident]にマッチするタグをリ
			スト表示する。
			[ident]を省略した場合、タグスタック上の最後のタグが使
			われる。
			最初の列に '>' があるものはリスト中の現在の位置を指し
			示している(それがあるならば)。
			[ident]は正規表現を取り得る。|tag-regexp|を参照。
			リストに使われているプロパティは|tag-priority|を参照。
			{Vi にはない}
			出力例:

>
	 nr pri kind tag		file
	  1 F	f    mch_delay		os_amiga.c
			mch_delay(msec, ignoreinput)
	> 2 F	f    mch_delay		os_msdos.c
			mch_delay(msec, ignoreinput)
	  3 F	f    mch_delay		os_unix.c
			mch_delay(msec, ignoreinput)
	Enter nr of choice (<CR> to abort):
<
			"pri" については|tag-priority|を参照。この例は現在の
			ファイルに依存しているため、":tselect xxx" を使ったと
			きには違う結果が得られることに注意すること。
			"kind" はタグファイルからタグの種類が得られる場合のみ、
			その情報を示す。
			"info" はタグファイルから得られる情報が表示される。こ
			の情報はタグファイルを生成したプログラムに依存する。
			リストが長い場合には|more-prompt|が表示される。もしす
			でに使いたいタグを見つけているのなら、'q' のあとに
			"nr" の番号を入力すればよい。

							*:sts* *:stselect*
:sts[elect][!] [ident]	":stselect[!] [ident]" を実行し、ウィンドウを分割して
			選択されたtagを表示する。{Vi にはない}

							*g]*
g]			CTRL-]と動作は似ているが、":tag" の代わりに ":tselect"
			を用いる。{Vi にはない}

							*v_g]*
{Visual}g]		"g]" と同じ。ただし、選択されたテキストが検索に使われ
			る。{Vi にはない}
							*:tj* *:tjump*
:tj[ump][!] [ident]	":tselect" と動作は似ているが、適合するtagが１つだけの
			ときには直接移動する。{Vi にはない}

							*:stj* *:stjump*
:stj[ump][!] [ident]	":tjump[!] [ident]" を実行し、ウィンドウを分割して選択
			されたtagを表示する。{Vi にはない}

							*g_CTRL-]*
g CTRL-]		CTRL-]と動作は似ているが、":tag" の代わりに ":tjump"
			を用いる。{Vi にはない}

							*v_g_CTRL-]*
{Visual}g CTRL-]	"g CTRL-]" と同じ。ただし、選択されたテキストが検索に
			使われる。
							*:tn* *:tnext*
:[count]tn[ext][!]	適合するtagのうち、[count]番目のtagに移動する。(省略時
			は1。)[!]に関しては|tag-!|を参照。{Vi にはない}

							*:tp* *:tprevious*
:[count]tp[revious][!]	適合するtagのうち、[count]分だけ前のtagに移動する。(
			省略時は1。)[!]に関しては|tag-!|を参照。{Vi にはない}

							*:tN* *:tNext*
:[count]tN[ext][!]	":tprevious" と同様。{Vi にはない}

							*:tr* *:trewind*
:[count]tr[ewind][!]	適合したtagのうち最初のtagに移動する。もし[count]が与
			えられていたら、[count]番目のtagに移動する。[!]につい
			ては|tag-!|を参照。{Vi にはない}

							*:tf* *:tfirst*
:[count]tf[irst][!]	":trewind" と同じ。{Vi にはない}
							*:tl* *:tlast*
:tl[ast][!]		適合したtagのうち最後のtagに移動する。[!]に関しては
			|tag-!|を参照。{Vi にはない}

							*:lt* *:ltag*
:lt[ag][!] [ident]	タグ[ident]にジャンプし、マッチするタグ全てをカレント
			ウィンドウの新しいロケーションリストに追加する。
			[ident]は正規表現でもよい(|tag-regexp|を参照)。[ident]
			が指定されないときはタグスタックにある最後のタグ名が使
			われる。タグにマッチする行を特定するための検索パターン
			には、特別な文字を全てエスケープするために "\V" がつけ
			られる(very nomagic)。マッチするタグを保持するロケー
			ションリストはタグスタックとは独立している。[!]につい
			ては|tag-!|を参照。{Vi にはない}

他にメッセージがないとき、Vimは今までに移動したtagとtagの数を表示する: >
	tag 1 of 3 or more
" or more" は、Vimがまだすべてのtagファイルを検索していないことを示すために用
いられる。":tnext" を数回用いるか、":tlast" を使用したとき、さらにtagが見つけ
られるだろう。

他のメッセージがあったときや、現在の場所を知りたいときには次のコマンドで再び
表示することができる。(最後に行った移動と同じtagに移動する。): >
	:0tn
<
							*tag-skip-file*
マッチしたタグに対するファイルが見つからなかった場合、スキップされて次にマッチ
するタグが使われる。Vimはファイルがないことを通知する。もしリストの終端に達し
ていたならば、エラーメッセージが与えられる。

							*tag-preview*
タグマッチリストはプレビューウィンドウ内でも使用できる。そのコマンドは上記のも
のに似ているが、先頭に "p" がつく。
{|+quickfix|が無効なときは利用できない}

							*:pts* *:ptselect*
:pts[elect][!] [ident]	":tselect[!] [ident]" を実行し、"Preview" ウィンドウに
			新しいタグを表示する。詳細は|:ptag|を参照すること。
			{Vi にはない}

							*:ptj* *:ptjump*
:ptj[ump][!] [ident]	":tjump[!] [ident]" を実行し、"Preview" ウィンドウに新
			しいタグを表示する。詳細は|:ptag|を参照すること。
			{Vi にはない}

							*:ptn* *:ptnext*
:[count]ptn[ext][!]	プレビューウィンドウで ":tnext" を実行する。|:ptag|を
			参照すること。{Vi にはない}

							*:ptp* *:ptprevious*
:[count]ptp[revious][!]	プレビューウィンドウで ":tprevious" を実行する。
			|:ptag|を参照すること。{Vi にはない}

							*:ptN* *:ptNext*
:[count]ptN[ext][!]	":ptprevious" と同じ。{Vi にはない}

							*:ptr* *:ptrewind*
:[count]ptr[ewind][!]	プレビューウィンドウで ":trewind" を実行する。|:ptag|
			を参照すること。{Vi にはない}

							*:ptf* *:ptfirst*
:[count]ptf[irst][!]	":ptrewind" と同じ。{Vi にはない}

							*:ptl* *:ptlast*
:ptl[ast][!]		プレビューウィンドウで ":tlast" を実行する。|:ptag|を
			参照すること。{Vi にはない}

==============================================================================
4. タグの詳細						*tag-details*

							*static-tag*
staticタグは特別なファイルのために定義されたタグである。Cプログラムではstatic
関数が当てはまる。

Viはタグにジャンプするときに現在の検索パターンを設定する。これはタグにジャンプ
したあとの "n" コマンドは、その前の検索パターンと同じ検索を行わないということ
である。Vimではこのようなバグとも考えられることはしない。検索履歴にある検索パ
ターンで検索できる。もし古いViの振る舞いを望むならば、'cpoptions' に 't' を設
定する。

							*tag-binary-search*
Vimは希望のタグをすばやく見つけるために、タグファイル内で二分検索を行う
(|+tag_binary|がコンパイル時に有効になっていれば)。しかしこれはタグファイルが
ASCIIコードでソートされている場合にのみ機能する。したがって、もし適合しないも
のが見つかった場合は、その他の方法として線形検索が行われる。もし線形検索のみを
利用したいならば、'tagbsearch' オプションをリセットすればよい。そうでなければ:
タグファイルをソートすること!

検索が明確な名前をもったタグでない場合は二分検索は利用できないことに注意するこ
と。これは大文字小文字を無視した検索や固定文字列で始まらない正規表現による検索
で発生する。そのときはタグ検索はかなり遅くなるだろう。先人はタグファイルを大文
字と小文字を区別せずにソートすることで回避できた。詳細は 'tagbsearch' を参照の
こと。

							*tag-regexp*
":tag" と "tselect" コマンドは引数に正規表現を受け付ける。使用できる特殊文字に
ついては|pattern|を参照すること。引数が '/' で始まる場合はパターンとして使われ
る。もし引数が '/' で始まらなければ、完全なタグ名の文字列として扱われる。
例: >
    :tag main
<	最も優先度の高い "main" というタグにジャンプする。 >
    :tag /^get
<	最も優先度の高い "get" で始まるタグにジャンプする。 >
    :tag /norm
<	"norm" を含むすべてのタグを列挙する。これは "id_norm" というタグも含ま
	れる。
もし引数と全く同じタグと、正規表現によってマッチしたタグがあった場合、引数と同
じタグが優先される。例えば、":tag /open" は "open_file" や "file_open" よりも
前に "open" にマッチする。
正規表現を使うときは大文字・小文字は区別されない。大文字・小文字を区別したいな
ら正規表現の中で "\C" を使うこと。

							*tag-!*
もしタグが現在のファイル上にあるならば、いつも機能するだろう。そうでなければ、
実行結果は現在のファイルが変更されているか、コマンドに!がつけられているか、
'autowrite' オプションが設定されているかに依存する:

タグが現在の		   autowrite			~
 ファイル内   変更あり	!  オプション	  動作		~
-----------------------------------------------------------------------------
    yes		 x	x     x	  タグに行く
    no		 no	x     x	  対象ファイルを読み込み、タグに行く
    no		yes    yes    x   現在のファイルを捨て、対象ファイルを読み込ん
				  でタグに行く
    no		yes	no    on  現在のファイルを保存し、対象ファイルを読み込
				  んでタグに行く
    no		yes	no   off  失敗する
-----------------------------------------------------------------------------

- タグが現在のファイル上にある場合は、コマンドはいつも機能する。
- タグが他のファイル上にあり、現在のファイルが変更されていないならば、対象とな
  るファイルがバッファに読み込まれる。
- タグが他のファイル上にあり、現在のファイルが変更されていて、かつ!がコマンド
  につけられている場合には、現在のファイルに対する変更は失われ、対象となるファ
  イルがバッファに読み込まれる。
- タグが他のファイル上にあり、現在のファイルが変更されていて、かつ 'autowrite'
  オプションが設定されている場合には、現在のファイルは保存され、対象となるファ
  イルがバッファに読み込まれる。
- タグが他のファイル上にあり、現在のファイルが変更されていて、かつ 'autowrite'
  オプションが設定されていない場合には、コマンドは失敗する。変更を保存したいな
  らば ":w" コマンドを使用し、そのあとで ":tag" を引数なしで実行する。これはタ
  グがスタック上に残っているためにうまく機能する。変更を失ってもよいのならば、
  ":tag!" コマンドを使用できる。

							*tag-security*
Vimはセキュリティの都合上、いくつかのコマンドを禁止していることに注意すること。
これはちょうど現在のディレクトリにあるexrc/vimrcファイルに 'secure' オプション
が使われているのと同じように機能する。|trojan-horse|と|sandbox|を参照すること。
{tagaddress}がバッファを変更したとき、次のようなエラーメッセージが表示される:
	"WARNING: tag command changed a buffer!!!"
将来のバージョンではバッファを変更することは不可能になるだろう。これらはすべて
セキュリティの理由である: 誰かが気付かれないように実行される厄介なコマンドをタ
グファイルに隠しているかもしれない。例えば: >
	:$d|/tag-function-name/
{Vi ではこのセキュリティ予防は提供されない}.

Viでは ":tag" コマンドによってタグを検索すると、最新の検索パターンを上書きする。
Vimでは 'cpoptions' に 't' フラグが設定されていなければ、前の検索パターンは引
き続き記憶される。検索パターンはいつも検索履歴にあるので、もし検索に失敗したら
そこを修正するとよい。

					*emacs-tags* *emacs_tags* *E430*
Emacsスタイルのタグファイルは、Vimのコンパイル時に|+emacs_tags|機能を有効にし
た場合にのみ使用できる。すまないが、Emacsタグファイルについての説明はここでは
しない。それは下位互換のためにのみ提供している :-)。

Emacs タグファイルの行は非常に長くなることがある。Vim は行の約510バイトまでし
か扱わない。行が無視されたかどうかは 'verbose' を5以上にしていればわかる。

							*tags-option*
'tags' オプションはファイル名のリストで構成される。これらのファイルからタグが
検索される。デフォルトの "tags" ファイルよりも、異なるtagsファイルがよく使われ
るだろう。共通のtagsファイルにもよくアクセスするだろう。

以下のようなときは、リストの次のファイルを使わない:
- 現在のバッファに対するstaticタグが見つかった場合。
- globalタグが見つかった場合。
これらは 'ignorecase' オプションに依存する。もしオフにしてあり、tagsファイルに
大文字小文字が一致するタグがない場合、一致するタグを次のtagsファイルで検索す
る。もし一致するタグが見つからなければ、大文字小文字を無視して最初にマッチした
ものが使われる。もし 'ignorecase' がオンの場合、大文字小文字の区別なく、global
タグが見つかった時点でそのタグが使用され、それ以降のtagsファイルは検索されな
い。

タグファイル名が "./" で始まるとき、'.' は現在のファイルのパスで置き換えられ
る。これにより、現在のファイルがあるディレクトリのtagsファイルを使用することが
できる(たとえ現在のディレクトリがどこであろうと)。"./" を使用する概念は、どの
タグファイルを最初に検索するかを決定することである: 現在のディレクトリにするか
("tags,./tags")、現在のファイルがあるディレクトリにするか("./tags,tags")であ
る。

例: >
	:set tags=./tags,tags,/home/user/commontags

この例では、現在のファイルがあるディレクトリの "tags" ファイルがまず検索され
る。次に現在のディレクトリにある "tags" ファイルが検索される。もしまだ見つから
なければ、"/home/user/commontags" が検索される。

これは 'cpoptions' に 'd' フラグを含めることでVi互換のようにすることができる。
"./tags" は現在のファイルがあるディレクトリのtagsファイルではなく、現在のディ
レクトリのtagsファイルを意味するようになる。

カンマの代わりにスペースを使用してもよい。文字列オプションに含めるためにはスペー
スの前にバックスラッシュが必要となる: >
	:set tags=tags\ /home/user/commontags

ファイル名にスペースを含めるにはバックスラッシュを３つ並べる。カンマをファイル
名に使用する場合にはバックスラッシュを２つ並べる。例えば: >
	:set tags=tag\\\ file,/home/user/common\\,tags

"tag file" と "/home/user/common,tags" というファイルが指定できる。'tags' オプ
ションは "tag\ file,/home/user/common\,tags" という値を持つだろう。

'tagrelative' オプションをオンにし(デフォルト)、他のディレクトリでタグファイル
を使用すると、タグファイル内に記述されたファイル名はタグファイルがあるディレク
トリを基準として相対パスになる。

==============================================================================
5. タグファイルの書式				*tags-file-format* *E431*

						*ctags* *jtags*
tagsファイルは "ctags" のような外部コマンドによって生成される。それはそれぞれ
の関数へのタグを含んでいる。"ctags" のあるバージョンでは "#defined" マクロや
typedef、enumなどに対してもタグを作ることができる。

tagsファイルを生成するプログラム:
ctags			ほとんどのUnixシステムにある。C言語のみ対応し、基本的な
			機能を提供する。
							*Exuberant_ctags*
exuberant ctags		これはとてもよいものだ。C言語、C++、Java、Fortran、
			Eiffel、そしてその他に対応している。多くの項目にタグを
			生成することができる。
			http://ctags.sourceforge.net を参照。
etags			Emacsに連携する。多言語に対応している。
JTags			Java 用、Java で書かれている。
			http://www.fleiner.com/jtags/で入手できる。
ptags.py		Python 用、Python で書かれている。
			PythonのソースディレクトリTools/scripts/ptags.pyにある。
ptags			Perl 用、Perl で書かれている。これはここで見つかる。
			http://www.eleves.ens.fr:8080/home/nthiery/Tags/
gnatxref		Ada用。http://www.gnuada.org/ を参照。
			gnatxrefはgnatパッケージの一部である。

tagsファイルは次の３つの形式のどれかで構成されなければならない:

1.  {tagname}		{TAB} {tagfile} {TAB} {tagaddress}
2.  {tagfile}:{tagname} {TAB} {tagfile} {TAB} {tagaddress}
3.  {tagname}		{TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..

最初の形式は通常のタグで、Viで完全に互換性がある。伝統的なctagsによってのみ作
られる形式である。これはしばしばグローバルな関数や他のファイルを参照する場合に
使用される。

タグファイルの行は<LF>または<CR><LF>で終わる。Macintoshでは<CR>も機能する。
<CR>と<NL>は行内に決して現れない。

							*tag-old-static*
２番目の形式はstaticタグにのみ使用できる。現在では廃れており、３番目の形式に置
き換えられている。これはElvis 1.xとVim、それといくつかのバージョンのctagsによっ
てのみサポートされている。staticタグはローカル関数によく用いられ、{tagfile}内
のみ参照する。staticタグでは２つの{tagfile}は正確に一致していなければならない
ことに注意すること。staticタグがどのように使われるかについては|tags-option|を
参照すること。

3番目の形式は新しい。各行の末尾にある任意的なフィールドに追加の情報を含む。こ
れは以前のViとも互換性がある。新しいバージョンのctagsにのみサポートされている
(Exuberant ctagsとか)。

{tagname}	識別子。普通は関数名であるが、どんな識別子でも構わない。<Tab>
		を含めることはできない。
{TAB}		1文字の<Tab>。 Note: 以前のバージョンではここでどんな空白文字
		も許可していた。これは{tagfile}内にスペースを使うことを断念し
		たためである。コンパイル時に|+tag_any_white|機能を付加すれば再
		び使えるようになる。 *tag-any-white*
{tagfile}	{tagname}の定義を含むファイル名。絶対パスでも相対パスでも構わ
		ない。環境変数やワイルドカードを含んでもよい(ワイルドカードの
		使用方法はあいまいだが)。<Tab>を含むことはできない。
{tagaddress}	カーソルをタグ上に移動するExコマンド。制限(|tag-security|を参
		照)はあるが、どんなExコマンドでも使用可能である。
		Posixでは主に使われる行番号と検索コマンドのみ許可する。
{term}		;" セミコロンとダブルクォートの2文字。これはViによってコメント
		とみなされ、続く文字列は無視される。以前のViとの互換性を保つた
		めにある。これは続くフィールドを無視する。
{field} ..	任意のフィールドのリスト。各フィールドは次の書式を持つ:

			<Tab>{fieldname}:{value}

		{fieldname}はフィールドの識別子であり、アルファベットのみ使用
		可能である[a-zA-Z]。
		{value}は任意の文字列であるが、<Tab>は使用できない。
		以下の特殊文字が使用できる:
			"\t" は<Tab>を表す
			"\r" は<CR>を表す
			"\n" は<NL>を表す
			"\\" は\を表す

		':' を持たないフィールドがある。これはタグの一種である。
		"kind:" を先頭につけたものとして扱われる。
		kindsについては、それを提供するctagsのドキュメントを参照。

		現在Vimが認識できるその他のフィールドは "file:" (値はなし)だけ
		である。これはstaticタグに使われる。

tagsファイルの先頭行には、
	!_TAG_
で始まる行を含めることができる。
これらは極稀な "!" で始まるタグを除けば先頭行にソートされる。Vimは2つのタグを
認識する。1つはファイルがソートされているかどうかを示す行で、この行が見つかっ
た場合には、Vimはtagsファイルに対して二分検索を使用する:
	!_TAG_FILE_SORTED<TAB>1<TAB>{anything} ~

'ignorecase' がonのときに線形検索を避けるために、大文字と小文字を区別せずにタ
グファイルがソートされることがある。詳細は 'tagbsearch' を参照。そのときは '2'
が使われる:
	!_TAG_FILE_SORTED<TAB>2<TAB>{anything} ~

Vimが認識するもう1つのタグはタグファイルのエンコーディングを指定するものであ
る。これは|+multi_byte|が有効なときだけ利用できる:
	!_TAG_FILE_ENCODING<Tab>utf-8<Tab>{anything} ~
ここで "utf-8" はタグのエンコーディングである。Vimはタグを検索するときに検索す
るタグを 'encoding' からタグファイルのエンコーディングに変換する。そして、タグ
をリストするときに元に戻す。変換が失敗したときは元のままのタグが使われる。

							*tag-search*
コマンドはどんなExコマンドでも使用可能であるが、検索コマンドがよく使われるであ
ろう。
例:
	tag1	file1	/^main(argc, argv)/ ~
	tag2	file2	108 ~

コマンドは常に 'magic' がセットされない状態で実行される。検索パターンで使用で
きる特殊文字は "^" (行頭) と "$" (<EOL>) だけである。|pattern|を参照すること。
検索文字列中のバックスラッシュの前にはバックスラッシュをつけなければならないこ
とに注意すること。これは以前のViと互換性がある。

							*E434* *E435*
もしコマンドが普通の検索コマンド ("/" か "?" で始まり、終わる) であるならば、
いくつかの特別な扱いをされる:
- 検索はファイルの1行目から開始する。
  検索方向は "/" で前方、"?" で後方となる。
  'wrapscan' は問題にならず、いつもファイル全体を検索することに注意。(Vi は
  'wrapscan' を使用するため、それが原因でタグが見つからないこともある。) {Vi は
  別のファイルの2行目から検索を開始する。'wrapscan' を設定しないときには、別
  のファイルの1行目にあるタグは見つけられない}
- 検索が失敗した場合は、大文字小文字を無視してもう一度検索する。それも失敗した
  場合には次の検索が行われる:
	"^tagname[ \t]*("
  (タグの先頭に '^'、末尾に "[ \t]*(" が追加される)。関数名の検索の場合には、
  これはカラム0の位置にある関数名を見つけるだろう。関数の引数がtagsファイルを
  作成したときから変更になったときなどに役立つだろう。この検索でも見つからない
  場合にはさらに次の検索が行われる:
	"^[#a-zA-Z_].*\<tagname[ \t]*("
  この意味は: '#' もしくは識別子で始まり、空白文字と '(' が続くタグを含む行で
  ある。これは型が先頭にあるマクロ名や関数名を見つけるだろう。{Vi には拡張検索
  はない}

==============================================================================
6. インクルードファイルの検索		*include-search* *definition-search*
							*E387* *E388* *E389*

これらのコマンドは対象となる文字列を現在のファイルと、遭遇するすべてのインクルー
ドファイルを再帰的に探す。これは変数や関数、マクロの定義を探すのに利用できる。
現在のバッファに対してだけ検索をしたいのならば、|pattern-searches|に列挙されて
いるコマンドを使うとよい。

これらのコマンドは、コンパイル時に|+find_in_path|機能を使用不可にした場合には
利用できない。

他のファイルをインクルードする行に遭遇すると、現在のバッファを続けて検索する前
にインクルードファイルを検索する。インクルードファイルによってインクルードされ
るファイルも同様に検索される。インクルードファイルが見つからなかった場合は黙っ
て無視する。見つからなかったファイルを知りたいときは|:checkpath|コマンドを使う。
たぶん 'path' オプションが正しく設定されていないのだろう。Note: インクルード
ファイルはファイルが検索され、そのファイルを編集中のバッファが存在しても対象に
ならない。バッファにある行は、現在のファイルにのみ適用される。

検索文字列は任意のキーワードや定義されたマクロが指定できる。キーワードの場合は
マッチするものを見つける。定義されたマクロの場合は 'define' オプションにマッチ
する行だけが見つけられる。デフォルトはCプログラム用の "^#\s*define" である。他
の言語の場合はおそらく変更したいだろう。C++用の例は 'define' を参照。その文字
列に改行を含めることはできない。一行内にマッチするものだけが見つかる。

定義されたマクロが見つかった場合、行末がバックスラッシュのときは次の行も表示す
る。

"[" で始まるコマンドは現在のファイルの先頭から検索を開始する。"]" で始まるコマ
ンドは現在のカーソル位置から検索を開始する。

'include' オプションは他のファイルをインクルードする行を定義する。デフォルトは
Cプログラム用の "\^#\s*include" である。Note: VimはCの構文を認識しない。もし
'include' オプションにマッチする行が "#ifdef/#endif" の間やコメント行であって
も、とにかく検索される。'isfname' オプションはマッチパターンに続くファイル名を
認識するために使用される。

'path' オプションは絶対パスを持たないインクルードファイルを探すためのディレク
トリを指定する。

'comments' オプションは単一行を表示するコマンド、もしくは行にジャンプするコマ
ンドで使用される。これはコメントの開始パターンを定義する。それらの行は [!] を
使用しない限り検索において無視される。ひとつの例外: 行が "^# *define" というパ
ターンにマッチしたとき、コメントであるとはみなされない。

もしマッチしたリストを表示して、その中からジャンプ先を選択したいならば、マッピ
ングが利用できる。例: >

  :map <F4> [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
<
							*[i*
[i			カーソルの下にあるキーワードを含む１行を表示する。検索
			はファイルの先頭から開始する。コメントとみなせる行は無
			視される('comments' オプションを参照すること)。数字が
			与えられた場合は、先頭から指定した個数目にマッチした行
			を表示する。この場合はコメント行は無視されない。
			{Vi にはない}

							*]i*
]i			"[i" と同様だが、検索が現在のカーソル位置から開始され
			る。{Vi にはない}

							*:is* *:isearch*
:[range]is[earch][!] [count] [/]pattern[/]
			"[i" や "]i" と同様だが、[range]で指定された範囲から検
			索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

							*[I*
[I			カーソルの下にあるキーワードを含む行をすべて表示する。
			結果にはファイル名と行番号が表示される。検索はファイル
			の先頭から開始される。{Vi にはない}

							*]I*
]I			"[I" と同様だが、検索が現在のカーソル位置から開始され
			る。{Vi にはない}

							*:il* *:ilist*
:[range]il[ist][!] [/]pattern[/]
			"[I" や "]I" と同様だが、[range]で指定された範囲から検
			索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

							*[_CTRL-I*
[ CTRL-I		カーソルの下にあるキーワードを含む最初の１行にジャンプ
			する。検索はファイルの先頭から開始する。コメントとみな
			せる行は無視される ('comments' オプションを参照するこ
			と)。数字が与えられた場合は、先頭から指定した個数目に
			マッチした行にジャンプする。この場合はコメント行は無視
			されない。{Vi にはない}

							*]_CTRL-I*
] CTRL-I		"[ CTRL-I" と同様だが、検索が現在のカーソル位置から開
			始される。{Vi にはない}

							*:ij* *:ijump*
:[range]ij[ump][!] [count] [/]pattern[/]
			"[ CTRL-I" や "] CTRL-I" と同様だが、[range]で指定され
			た範囲から検索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

CTRL-W CTRL-I					*CTRL-W_CTRL-I* *CTRL-W_i*
CTRL-W i		新しいウィンドウを開き、カーソルの下にあったキーワード
			を含む最初の１行に移動する。検索はファイルの先頭から開
			始する。コメントとみなせる行は無視される('comments' オ
			プションを参照すること)。数字が与えられた場合は、先頭
			から指定した個数目にマッチした行にジャンプする。この場
			合はコメント行は無視されない。{Vi にはない}

							*:isp* *:isplit*
:[range]isp[lit][!] [count] [/]pattern[/]
			"CTRL-W i" や "CTRL-W i" と同様だが、[range]で指定され
			た範囲から検索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

							*[d*
[d			カーソルの下にあるマクロを含む最初のマクロ定義を表示す
			る。検索はファイルの先頭から開始する。数字が与えられた
			場合は、先頭から指定した個数目にマッチした行を表示する。
			{Vi にはない}

							*]d*
]d			"[d" と同様だが、検索が現在のカーソル位置から開始され
			る。{Vi にはない}

							*:ds* *:dsearch*
:[range]ds[earch][!] [count] [/]string[/]
			"[d" や "]d" と同様だが、[range]で指定された範囲から検
			索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

							*[D*
[D			カーソルの下にあるマクロを含むすべてのマクロ定義を表示
			する。結果にはファイル名と行番号が表示される。検索はファ
			イルの先頭から開始される。{Vi にはない}

							*]D*
]D			"[D" と同様だが、検索が現在のカーソル位置から開始され
			る。{Vi にはない}

							*:dli* *:dlist*
:[range]dli[st][!] [/]string[/]
			"[D" や "]D" と同様だが、[range]で指定された範囲から検
			索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}
			Note: ":dl" は ":delete" に "l" レジスタ を指定したも
			のとして機能する。

							*[_CTRL-D*
[ CTRL-D		カーソルの下にあるキーワードを含む最初のマクロ定義にジャ
			ンプする。検索はファイルの先頭から開始する。数字が与え
			られた場合は、先頭から指定した個数目にマッチした行にジャ
			ンプする。 {Vi にはない}

							*]_CTRL-D*
] CTRL-D		"[ CTRL-D" と同様だが、検索が現在のカーソル位置から開
			始される。{Vi にはない}

							*:dj* *:djump*
:[range]dj[ump][!] [count] [/]string[/]
			"[ CTRL-D" や "] CTRL-D" と同様だが、[range]で指定され
			た範囲から検索する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

CTRL-W CTRL-D					*CTRL-W_CTRL-D* *CTRL-W_d*
CTRL-W d		新しいウィンドウを開き、カーソルの下にあったキーワード
			を含む最初のマクロ定義に移動する。検索はファイルの先頭
			から開始する。数字が与えられた場合は、先頭から指定した
			個数目にマッチした行にジャンプする。 {Vi にはない}

							*:dsp* *:dsplit*
:[range]dsp[lit][!] [count] [/]string[/]
			"CTRL-W d" と同様だが、[range]で指定された範囲から検索
			する(デフォルト: ファイル全体)。
			[/]と[!]については|:search-args|を参照。{Vi にはない}

							*:che* *:checkpath*
:che[ckpath]		ファイルが見つからないすべてのインクルードファイル名を
			リスト表示する。
			{Vi にはない}

:che[ckpath]!		すべてのインクルードファイル名をリスト表示する。
			{Vi にはない}

								*:search-args*
上記コマンドに共通の引数:
[!]   使用した場合は、コメントとみなせる行に対しても検索をする。使用しなかった
      場合は 'comments' によってコメントとみなされる行やCコメント("//" の後ろ
      か /* */ の間)にあるものは無視される。コメントとみなされた行が、途中から
      コメントでなくなるようなときは見逃すかもしれないことに注意。また、コメン
      ト行であっても、('comments' によって)認識されないでとにかくマッチするか
      もしれない。例: >
		/* comment
		   foobar */
<     "foobar" に対する検索はマッチする。これは行がコメントとして認識されない
      ためである(たとえ構文強調表示が認識したとしても)。
      Note: マクロ定義はたいていコメントと誤認されることはないので、":dlist"
      や ":dsearch"、":djump" に[!]を使用することは大差がない。
[/]   パターンは '/' で囲むことができる。'/' なしの場合、"\<pattern\>" という
      パターンを使うことによって、完全な語だけがマッチする。2つ目の '/' の後に
      だけ、'|' を使うことによって次のコマンドを追加できる。例: >
	:isearch /string/ | echo "the last one"
<     ":djump", ":dsplit", ":dlist", ":dsearch" コマンドではパターンは検索パ
      ターンとしてではなく文字通りに使われる。

 vim:tw=78:ts=8:ft=help:norl:
