1 *usr_27.txt* For Vim バージョン 7.2. Last change: 2007 Nov 10
3 VIM USER MANUAL - by Bram Moolenaar
8 3 章で検索パターンについて簡単に説明しました |03.9|。Vim ではもっと複雑な検索
9 もできます。この章では、よく使われる検索パターンについて説明します。詳細な仕様
10 については |pattern| を参照してください。
26 ==============================================================================
29 初期設定では大文字と小文字は区別されます。つまり "include" と "INCLUDE" と
30 "Include" は三つの別々の単語として扱われ、検索してもどれか一つにしかマッチしま
32 'ignorecase' オプションをオンにしてみましょう: >
36 "include" を検索すると、"Include" にも "INCLUDE" にも "InClUDe" にもマッチしま
37 す。('hlsearch' オプションをオンにするとパターンにマッチした箇所を簡単に確認で
39 次のコマンドでオプションをオフにできます: >
43 しかしまだ設定は変更せずに、そのまま "INCLUDE" を検索してみます。"include" を
44 検索したときとまったく同じテキストがマッチします。次に 'smartcase' オプション
47 :set ignorecase smartcase
49 パターンに大文字が含まれているときに限り、大文字と小文字が区別されるようになり
50 ます。これは、大文字を入力するのは大文字と小文字を区別したいときだけだろうとい
52 この二つのオプションを設定すると次のようにマッチします:
55 word word, Word, WORD, WoRd, etc.
62 ----------------------
64 ある特定のパターンの中でだけ大文字と小文字の無視したい場合は、パターンに "\c"
65 をつけます。大文字と小文字を区別したいときは "\C" を使います。"\c" と "\C" の
66 指定は 'ignorecase' と 'smartcase' の設定よりも優先されます。
71 \cword word, Word, WORD, WoRd, etc.
72 \cWord word, Word, WORD, WoRd, etc.
74 "\c" と "\C" の大きな利点はそれがパターンに埋め込まれていることです。検索履歴
75 からパターンを再利用したときなどに、同じ検索結果を期待できます。'ignorecase'
76 や 'smartcase' の設定は影響しません。
79 検索パターンでの "\" の扱いは 'magic' オプションに依存します。この章で
80 は 'magic' がオンに設定されていることを前提にしています。それが標準設
81 定であり推奨設定です。'magic' を変更してしまうと今まで使えていた検索パ
82 ターンが使えなくなってしまうかもしれません。
85 検索がなかなか終わらない場合は CTRL-C (Unix) または CTRL-Break (MS-DOS
86 と MS-Windows) で処理を中断できます。
88 ==============================================================================
91 前方検索を実行すると現在のカーソル位置から処理が開始し、指定された文字列が検索
92 されます。そしてファイルの末尾まで検索が進みます。ファイルの末尾まで検索しても
93 文字列が見つからない場合は、ファイルの先頭からカーソル位置に向かって検索が継続
95 "n" コマンドを使って順々に検索を進めている場合もそのうち最初にヒットした場所に
96 戻ってきます。これに気が付かないと永遠に検索を続けることになってしまいます!
97 そのようなことがないように、次のようなメッセージが表示されます:
101 "?" コマンドを使って逆方向に検索している場合は次のメッセージが表示されます:
105 それでも気づかないことがあるかもしれません。'ruler' オプションをオンにすると確
110 ウィンドウの右下隅 (ステータスラインがあるときはその中) にカーソルの位置が表示
115 最初の数字はカーソルの行番号です。検索を開始した行番号を覚えておいて、検索が一
122 検索を折り返さないようにするには次のコマンドを使います: >
126 検索がファイルの末尾に達するとエラーメッセージが表示されます:
128 E385: 下まで検索したけれど該当箇所はありません: forever ~
130 すべての箇所を検索したい場合は "gg" でファイルの先頭に移動してからこのメッセー
131 ジが表示されるまで検索を繰り返してください。
132 "?" を使って逆方向に検索した場合は次のメッセージが表示されます:
134 E384: 上まで検索したけれど該当箇所はありません: forever ~
136 ==============================================================================
139 通常、検索コマンドを実行すると、パターンにヒットした場所の先頭にカーソルが移動
140 します。オフセットを指定することで別の場所に移動することができます。前方検索コ
141 マンドの "/" の場合、パターンの後ろに "/" とオフセット値を指定します: >
145 "default" というパターンが検索され、見つかった場所から二行下の行頭にカーソルが
146 移動します。例えばこのコマンドで今読んでいる段落を検索すると、一行目に
147 "default" が見つかるので、カーソルはその二行した (つまりこの行) に移動すること
150 オフセットに数値を指定すると、マッチした行から指定した行数だけ移動した行の行頭
151 にカーソルが移動します。オフセット値には負の数も指定できます。正の数ならカーソ
152 ルが下に移動し、負の数なら上に移動します。
158 "e" はマッチした文字列の末尾を示すオフセットです。マッチした文字列の末尾にカー
159 ソルが移動します。次のように使います: >
163 "const" の "t" にカーソルが移動します。
164 オフセットに数値を足すと、その場所からさらにカーソルを進めることができます。
165 次のコマンドではマッチした文字列の後ろにカーソルが移動します: >
169 正の数ならカーソルが右に動き、負の数なら左に動きます。例: >
173 "const" の "s" にカーソルが移動します。
175 オフセットに "b" を指定すると、マッチした文字列の先頭に移動できます。これはオ
176 フセット指定無しの動作と同じなので単体では使い道はありません。数値を足したり引
177 いたりしたい場合に使います。指定した数だけカーソルを前後に移動できます。例: >
181 マッチした文字列の先頭から二文字右にカーソルが移動します。つまり "n" の上です。
187 直前に使った検索パターンを、別のオフセットを使って再検索したい場合は、パターン
197 同じオフセットを使って再検索したい場合は: >
201 "n" と同じ動作になります。オフセット指定を無効にして再検索したい場合は次のよう
210 "?" コマンドでも同じようにオフセットを指定できますが、パターンとオフセットを区
211 切るのは "/" ではなく "?" になります: >
215 "b" と "e" の意味は同じです。"?" を使う場合でも方向は逆になりません。
221 検索は通常、現在のカーソル位置から開始します。オフセットを指定するとうまくいか
226 "const" を検索してその二行上に移動します。"n" を使って再検索すると、その場所か
227 ら検索が開始して同じ場所の "const" がヒットします。そして、再びオフセットが適
228 用されて元の場所に戻ってきます。まったく移動できません。
229 次の行に "const" があった場合はもっとおかしなことになります。検索を実行すると
230 次の行がヒットして、その二行上にカーソルが移動するので、カーソルが逆方向に移動
233 文字オフセットを使った場合はそうなりません。オフセット指定の分だけ検索開始位置
234 がずれるので、同じものが再びヒットすることはありません。
236 ==============================================================================
239 ある文字を任意の数だけマッチさせたい場合は "*" を使います: >
243 これは "a" でも "aa" でも "aaa" でもマッチします。0 回というのも任意の数に含ま
244 れるので "" (空文字列) もマッチします。
245 "*" は直前の文字に対してだけ適用されます。"ab*" なら "a"、"ab"、"abb"、"abbb"
246 などがマッチします。単語を繰り返したい場合は、その単語をグループにまとめなけれ
247 ばなりません。"\(" と "\)" で単語を囲んでください。次のように使います: >
251 "ab"、"abab"、"ababab"、"" などにマッチします。
253 空文字列にマッチさせたくない場合は "\+" を使います。直前の文字が一つ以上あると
258 "ab"、"abb"、"abbb" などにマッチします。"b" が後ろに付いていない "a" にはマッ
261 0 または 1 つの文字にマッチさせたい場合は "\=" を使います。例: >
265 "folder" と "folders" がマッチします。
271 特定の数だけ文字をマッチさせるには "\{n,m}" を使います。"n" と "m" に数字を指
272 定します。直前の文字が "n" から "m" の数だけ連続している場合にマッチします。
277 "abbb"、"abbbb"、"abbbbb" にマッチします。
278 "n" を省略した場合は 0 が使われます。"m" が省略された場合は繰り返し回数は無制
279 限になります。",m" を省略した場合は、正確に "n" 回の繰り返しにマッチします。
282 pattern match count ~
283 \{,4} 0, 1, 2, 3 or 4
285 \{0,1} 0 or 1 (\= と同じ)
294 今まで説明した繰り返し指定は、可能な限りたくさんの文字列にマッチしようとしま
295 す。できるだけ少ない回数だけマッチさせるには "\{-n,m}" を使います。動作は
296 "\{n,m}" とほとんど同じですが、最短一致が使われます。
301 "abbbb" の中の "ab" だけがマッチします。一つの "b" にマッチするだけで条件を満
302 たすので、二つ目以降の "b" には絶対にマッチしません。後ろに他のパターンが続い
303 ているなら最小回数以上の文字にもマッチします。
304 "n" と "m" を省略した場合も同じルールが適用されます。両方の数字を省略して
305 "\{-}" とすることもできます。これは直前の文字が 0 回以上繰り返されている場合に
306 最小の数だけマッチします。単体で使った場合は常に 0 回にマッチします。他のパター
311 "axbxb" の中の "axb" にマッチします。次のパターンを使った場合は: >
315 ".*" は可能な限り多くの文字にマッチするので "axbxb" 全体がマッチします。
317 ==============================================================================
320 パターンの中で "or" (または) を指定するには "\|" を使います。例: >
324 "foo" と "bar" のどちらかがマッチします。複数の選択肢を指定できます: >
328 "one"、"two"、"three" のどれかにマッチします。
329 複数回マッチさせるには、全体を "\(" と "\)" で囲みます: >
333 "foo"、"foobar"、"foofoo"、"barfoobar" などにマッチします。
336 /end\(if\|while\|for\)
338 "endif"、"endwhile"、"endfor" にマッチします。
340 "\&" も似たような条件指定です。指定された選択肢がすべて同じ場所でマッチします。
341 マッチ結果としては最後の選択肢が使われます。例: >
345 "forever" の "for" にマッチします。"fortuin" にはマッチしません。
347 ==============================================================================
350 "a"、"b"、"c" のどれかにマッチさせるには "/a\|b\|c" が使えます。しかし "a" か
351 ら "z" までの文字をマッチさせようとするとパターンが長くなってしまいます。簡単
356 [] は一つの文字にマッチします。マッチさせたい文字を [] の中に指定します。次の
357 ようにして文字を一つずつ指定することもできます: >
361 指定された文字の中から一つがマッチします。文字が連続している場合は文字範囲を指
362 定できます。例えば "0-3" は "0123" という意味です。"w-z" は "wxyz" という意味
363 になります。上記の例は次のように短くできます: >
367 文字 "-" 自体をマッチさせたい場合は [] の中の一番最初か最後に書いてください。
368 [] の中では以下の特殊文字が使えます (これらは [] の中でなくても使えます):
375 [] の中では他にも特殊な指定方法が使えます。詳細は |/[]| を参照してください。
381 マッチして欲しくない文字を指定したい場合は、文字範囲の先頭に "^" を指定します。
382 すると、指定した文字以外の文字がマッチするようになります。例: >
391 "foo" や "3!x" がマッチします (ダブルクオートもマッチに含まれる)。
397 一般的な文字範囲はあらかじめ定義されています。
402 アルファベット文字が検索されます。これは "/[a-zA-Z]" と同じです。他にも次のよ
405 item matches equivalent ~
408 \x 16進数の数字 [0-9a-fA-F]
409 \X 16進数の数字以外 [^0-9a-fA-F]
410 \s 空白文字 [ ] (<Tab>か<Space>)
411 \S 空白文字以外 [^ ] (<Tab>か<Space>以外)
413 \L 小文字アルファベット以外 [^a-z]
415 \U 大文字アルファベット以外 [^A-Z]
418 定義済み文字範囲は普通の文字範囲よりも処理が高速です。
419 これらのアイテムは [] の中では指定できません。つまり "[\d\l]" と書いた
420 としても数字と小文字にはマッチしません。"\(\d\|\l\)" を使ってください。
422 定義済み文字範囲の一覧は |/\s| を参照してください。
424 ==============================================================================
427 文字範囲は特定の文字のセットにマッチします。文字クラスも似たようなものですが、
428 検索パターンを変更せずに文字のセットを変更できるという違いがあります。
433 "\f" はファイル名に使える文字を表します。つまりこのパターンはファイル名として
435 どの文字がファイル名として使えるかはシステムによって異なります。MS-Windows で
436 は "\" が使えますが Unix では使えません。これは 'isfname' オプションで指定され
440 isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=
442 他のシステムでは初期設定が変わります。ファイル名にマッチさせたいときに "\f" を
443 使えば、そのパターンはいろいろなシステムで使えます。
446 Unix では空白などのどんな文字でもファイル名に使えます。'isfname' にそ
447 れらの文字を設定するのは理論的には正しいことです。しかしその場合、テキ
448 ストの中からファイル名を切り出すのが困難になってしまいます。したがっ
449 て、'isfname' の初期設定にはすべての文字は含まれていません。
453 item matches option ~
454 \i 識別子に使える文字 'isident'
456 \k キーワードとなる文字 'iskeyword'
460 \f ファイル名に使える文字 'isfname'
463 ==============================================================================
466 改行を含んだパターンを検索することができます。改行の位置は明示的に指定する必要
467 があります。今までに説明したパターンアイテムはどれも改行にマッチしません。
468 改行の場所を指定するには "\n" を使います: >
472 行末が "the" で終わり、次の行の行頭が "word" になっている行がマッチします。
473 "the word" にもマッチさせたい場合は、スペースと改行の両方をマッチさせる必要が
474 あります。それには "\_s" を使います: >
478 間に空白をいくつでも挟めるようにするには: >
482 これは、行末が "the " で終わり、次の行の行頭が " word" で始まっているよう
485 "\s" は空白にマッチします。"\_s" は空白と改行にマッチします。
486 同様に、"\a" はアルファベットにマッチし、"\_a" はアルファベットと改行にマッチ
487 します。他の文字クラスや文字範囲も同様に、"_" を付けることによって改行にもマッ
490 他の多くのパターンアイテムも "\_" を付けることによって改行にマッチさせることが
491 できます。例えば、"\_." は改行を含めたすべての文字にマッチします。
494 "\_.*" はファイル末尾までのすべての文字がマッチします。検索コマンドの
495 動作が遅くなるかもしれないので注意してください。
497 "\_[]" を使うと文字範囲にも改行を追加できます: >
501 ダブルクオートで囲まれたテキストが検索されます。間には改行も含むことができま
504 ==============================================================================
507 便利そうな検索パターンをいくつか説明します。今までに説明したパターンをどのよう
512 ----------------------------------------
514 "1MGU103" という番号を検索してみます。これは一つの数字、三つの大文字アルファ
515 ベット、三つの数字、から成っています。そのままパターンに置き換えてみます: >
519 同じものが並んでいる部分は回数指定に置き換えることができます: >
525 /[0-9][A-Z]\{3}[0-9]\{3}
527 あなたならどれを使いますか? どれでも覚えやすいものを使ってください。簡単に覚え
528 られる方法を使う方がそうでないものを頑張って覚えるよりずっと効率がよくなりま
529 す。最後の例は他より長くて実行速度も遅いので、どれでも覚えられるという場合は選
536 C 言語 (などのほとんどの言語) では、識別子は英文字で始まってその後に英数字が続
537 きます。アンダースコアも使えるかもしれません。次のパターンでそのような文字を検
542 "\<" と "\>" は単語全体をマッチさせるための指定です。"\h" は "[A-Za-z_]" と同
543 じ意味で、"\w" は "[0-9A-Za-z_]" と同じ意味になります。
546 "\<" と "\>" の動作は 'iskeyword' オプションに依存します。例えば "-"
547 が含まれている場合、上記パターンは "ident-" にマッチしません。次のパ
552 識別子の前後の文字が "\w" にマッチしないかどうかをチェックしています。
555 ==============================================================================
557 次章: |usr_28.txt| 折り畳み
559 Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: