Merge branch 'KaoriYa'
[MacVim/KaoriYa.git] / runtime / doc / usr_27.jax
blob77c52eeffcb695e28627175acef5262a4a930979
1 *usr_27.txt*    For Vim バージョン 7.2.  Last change: 2007 Nov 10
3                      VIM USER MANUAL - by Bram Moolenaar
5                             検索コマンドと正規表現
8 3 章で検索パターンについて簡単に説明しました |03.9|。Vim ではもっと複雑な検索
9 もできます。この章では、よく使われる検索パターンについて説明します。詳細な仕様
10 については |pattern| を参照してください。
12 |27.1|  大文字と小文字を区別しない
13 |27.2|  ファイルの端で折り返す
14 |27.3|  オフセット
15 |27.4|  繰り返しマッチ
16 |27.5|  選択肢
17 |27.6|  文字範囲
18 |27.7|  文字クラス
19 |27.8|  改行記号にマッチ
20 |27.9|  例
22 次章: |usr_28.txt|  折り畳み
23 前章: |usr_26.txt|  繰り返し
24 目次: |usr_toc.txt|
26 ==============================================================================
27 *27.1*  大文字と小文字を区別しない
29 初期設定では大文字と小文字は区別されます。つまり "include" と "INCLUDE" と
30 "Include" は三つの別々の単語として扱われ、検索してもどれか一つにしかマッチしま
31 せん。
32 'ignorecase' オプションをオンにしてみましょう: >
34         :set ignorecase
36 "include" を検索すると、"Include" にも "INCLUDE" にも "InClUDe" にもマッチしま
37 す。('hlsearch' オプションをオンにするとパターンにマッチした箇所を簡単に確認で
38 きます。)
39 次のコマンドでオプションをオフにできます: >
41         :set noignorecase
43 しかしまだ設定は変更せずに、そのまま "INCLUDE" を検索してみます。"include" を
44 検索したときとまったく同じテキストがマッチします。次に 'smartcase' オプション
45 をオンに設定してみます: >
47         :set ignorecase smartcase
49 パターンに大文字が含まれているときに限り、大文字と小文字が区別されるようになり
50 ます。これは、大文字を入力するのは大文字と小文字を区別したいときだけだろうとい
51 う考えに基づいています。スマートでしょ!
52 この二つのオプションを設定すると次のようにマッチします:
54         パターン            マッチ     ~
55         word                    word, Word, WORD, WoRd, etc.
56         Word                    Word
57         WORD                    WORD
58         WoRd                    WoRd
61 パターンの中で指定する
62 ----------------------
64 ある特定のパターンの中でだけ大文字と小文字の無視したい場合は、パターンに "\c"
65 をつけます。大文字と小文字を区別したいときは "\C" を使います。"\c" と "\C" の
66 指定は 'ignorecase' と 'smartcase' の設定よりも優先されます。
68         パターン            マッチ     ~
69         \Cword                  word
70         \CWord                  Word
71         \cword                  word, Word, WORD, WoRd, etc.
72         \cWord                  word, Word, WORD, WoRd, etc.
74 "\c" と "\C" の大きな利点はそれがパターンに埋め込まれていることです。検索履歴
75 からパターンを再利用したときなどに、同じ検索結果を期待できます。'ignorecase'
76 や 'smartcase' の設定は影響しません。
78         Note:
79         検索パターンでの "\" の扱いは 'magic' オプションに依存します。この章で
80         は 'magic' がオンに設定されていることを前提にしています。それが標準設
81         定であり推奨設定です。'magic' を変更してしまうと今まで使えていた検索パ
82         ターンが使えなくなってしまうかもしれません。
84         Note:
85         検索がなかなか終わらない場合は CTRL-C (Unix) または CTRL-Break (MS-DOS
86         と MS-Windows) で処理を中断できます。
88 ==============================================================================
89 *27.2*  ファイルの端で折り返す
91 前方検索を実行すると現在のカーソル位置から処理が開始し、指定された文字列が検索
92 されます。そしてファイルの末尾まで検索が進みます。ファイルの末尾まで検索しても
93 文字列が見つからない場合は、ファイルの先頭からカーソル位置に向かって検索が継続
94 します。
95 "n" コマンドを使って順々に検索を進めている場合もそのうち最初にヒットした場所に
96 戻ってきます。これに気が付かないと永遠に検索を続けることになってしまいます!
97 そのようなことがないように、次のようなメッセージが表示されます:
99         下まで検索したので上に戻ります ~
101 "?" コマンドを使って逆方向に検索している場合は次のメッセージが表示されます:
103         上まで検索したので下に戻ります ~
105 それでも気づかないことがあるかもしれません。'ruler' オプションをオンにすると確
106 認しやすくなります: >
108         :set ruler
110 ウィンドウの右下隅 (ステータスラインがあるときはその中) にカーソルの位置が表示
111 されます。次のような表示です:
113         101,29       84% ~
115 最初の数字はカーソルの行番号です。検索を開始した行番号を覚えておいて、検索が一
116 周してないか確認しましょう。
119 折り返さない
120 ------------
122 検索を折り返さないようにするには次のコマンドを使います: >
124         :set nowrapscan
126 検索がファイルの末尾に達するとエラーメッセージが表示されます:
128         E385: 下まで検索したけれど該当箇所はありません: forever ~
130 すべての箇所を検索したい場合は "gg" でファイルの先頭に移動してからこのメッセー
131 ジが表示されるまで検索を繰り返してください。
132 "?" を使って逆方向に検索した場合は次のメッセージが表示されます:
134         E384: 上まで検索したけれど該当箇所はありません: forever ~
136 ==============================================================================
137 *27.3*  オフセット
139 通常、検索コマンドを実行すると、パターンにヒットした場所の先頭にカーソルが移動
140 します。オフセットを指定することで別の場所に移動することができます。前方検索コ
141 マンドの "/" の場合、パターンの後ろに "/" とオフセット値を指定します: >
143         /default/2
145 "default" というパターンが検索され、見つかった場所から二行下の行頭にカーソルが
146 移動します。例えばこのコマンドで今読んでいる段落を検索すると、一行目に
147 "default" が見つかるので、カーソルはその二行した (つまりこの行) に移動すること
148 になります。
150 オフセットに数値を指定すると、マッチした行から指定した行数だけ移動した行の行頭
151 にカーソルが移動します。オフセット値には負の数も指定できます。正の数ならカーソ
152 ルが下に移動し、負の数なら上に移動します。
155 文字オフセット
156 --------------
158 "e" はマッチした文字列の末尾を示すオフセットです。マッチした文字列の末尾にカー
159 ソルが移動します。次のように使います: >
161         /const/e
163 "const" の "t" にカーソルが移動します。
164 オフセットに数値を足すと、その場所からさらにカーソルを進めることができます。
165 次のコマンドではマッチした文字列の後ろにカーソルが移動します: >
167         /const/e+1
169 正の数ならカーソルが右に動き、負の数なら左に動きます。例: >
171         /const/e-1
173 "const" の "s" にカーソルが移動します。
175 オフセットに "b" を指定すると、マッチした文字列の先頭に移動できます。これはオ
176 フセット指定無しの動作と同じなので単体では使い道はありません。数値を足したり引
177 いたりしたい場合に使います。指定した数だけカーソルを前後に移動できます。例: >
179         /const/b+2
181 マッチした文字列の先頭から二文字右にカーソルが移動します。つまり "n" の上です。
184 繰り返し
185 --------
187 直前に使った検索パターンを、別のオフセットを使って再検索したい場合は、パターン
188 指定を省略します: >
190         /that
191         //e
193 これは次の指定と同じです: >
195         /that/e
197 同じオフセットを使って再検索したい場合は: >
199         /
201 "n" と同じ動作になります。オフセット指定を無効にして再検索したい場合は次のよう
202 にします: >
204         //
207 後方検索
208 --------
210 "?" コマンドでも同じようにオフセットを指定できますが、パターンとオフセットを区
211 切るのは "/" ではなく "?" になります: >
213         ?const?e-2
215 "b" と "e" の意味は同じです。"?" を使う場合でも方向は逆になりません。
218 検索開始位置
219 ------------
221 検索は通常、現在のカーソル位置から開始します。オフセットを指定するとうまくいか
222 ないときがあります。例: >
224         /const/-2
226 "const" を検索してその二行上に移動します。"n" を使って再検索すると、その場所か
227 ら検索が開始して同じ場所の "const" がヒットします。そして、再びオフセットが適
228 用されて元の場所に戻ってきます。まったく移動できません。
229 次の行に "const" があった場合はもっとおかしなことになります。検索を実行すると
230 次の行がヒットして、その二行上にカーソルが移動するので、カーソルが逆方向に移動
231 してしまうのです。
233 文字オフセットを使った場合はそうなりません。オフセット指定の分だけ検索開始位置
234 がずれるので、同じものが再びヒットすることはありません。
236 ==============================================================================
237 *27.4*  繰り返しマッチ
239 ある文字を任意の数だけマッチさせたい場合は "*" を使います: >
241         /a*
243 これは "a" でも "aa" でも "aaa" でもマッチします。0 回というのも任意の数に含ま
244 れるので "" (空文字列) もマッチします。
245 "*" は直前の文字に対してだけ適用されます。"ab*" なら "a"、"ab"、"abb"、"abbb"
246 などがマッチします。単語を繰り返したい場合は、その単語をグループにまとめなけれ
247 ばなりません。"\(" と "\)" で単語を囲んでください。次のように使います: >
249         /\(ab\)*
251 "ab"、"abab"、"ababab"、"" などにマッチします。
253 空文字列にマッチさせたくない場合は "\+" を使います。直前の文字が一つ以上あると
254 きだけマッチするようになります: >
256         /ab\+
258 "ab"、"abb"、"abbb" などにマッチします。"b" が後ろに付いていない "a" にはマッ
259 チしません。
261 0 または 1 つの文字にマッチさせたい場合は "\=" を使います。例: >
263         /folders\=
265 "folder" と "folders" がマッチします。
268 回数指定
269 --------
271 特定の数だけ文字をマッチさせるには "\{n,m}" を使います。"n" と "m" に数字を指
272 定します。直前の文字が "n" から "m" の数だけ連続している場合にマッチします。
273 例: >
275         /ab\{3,5}
277 "abbb"、"abbbb"、"abbbbb" にマッチします。
278 "n" を省略した場合は 0 が使われます。"m" が省略された場合は繰り返し回数は無制
279 限になります。",m" を省略した場合は、正確に "n" 回の繰り返しにマッチします。
280 例:
282         pattern         match count ~
283         \{,4}           0, 1, 2, 3 or 4
284         \{3,}           3, 4, 5, etc.
285         \{0,1}          0 or 1 (\= と同じ)
286         \{0,}           0 以上 (* と同じ)
287         \{1,}           1 以上 (\+ と同じ)
288         \{3}            3
291 最短一致
292 --------
294 今まで説明した繰り返し指定は、可能な限りたくさんの文字列にマッチしようとしま
295 す。できるだけ少ない回数だけマッチさせるには "\{-n,m}" を使います。動作は
296 "\{n,m}" とほとんど同じですが、最短一致が使われます。
297 例: >
299         /ab\{-1,3}
301 "abbbb" の中の "ab" だけがマッチします。一つの "b" にマッチするだけで条件を満
302 たすので、二つ目以降の "b" には絶対にマッチしません。後ろに他のパターンが続い
303 ているなら最小回数以上の文字にもマッチします。
304 "n" と "m" を省略した場合も同じルールが適用されます。両方の数字を省略して
305 "\{-}" とすることもできます。これは直前の文字が 0 回以上繰り返されている場合に
306 最小の数だけマッチします。単体で使った場合は常に 0 回にマッチします。他のパター
307 ンと組み合わせて使うと便利です。例: >
309         /a.\{-}b
311 "axbxb" の中の "axb" にマッチします。次のパターンを使った場合は: >
313         /a.*b
315 ".*" は可能な限り多くの文字にマッチするので "axbxb" 全体がマッチします。
317 ==============================================================================
318 *27.5*  選択肢
320 パターンの中で "or" (または) を指定するには "\|" を使います。例: >
322         /foo\|bar
324 "foo" と "bar" のどちらかがマッチします。複数の選択肢を指定できます: >
326         /one\|two\|three
328 "one"、"two"、"three" のどれかにマッチします。
329 複数回マッチさせるには、全体を "\(" と "\)" で囲みます: >
331         /\(foo\|bar\)\+
333 "foo"、"foobar"、"foofoo"、"barfoobar" などにマッチします。
334 もう一つの例: >
336         /end\(if\|while\|for\)
338 "endif"、"endwhile"、"endfor" にマッチします。
340 "\&" も似たような条件指定です。指定された選択肢がすべて同じ場所でマッチします。
341 マッチ結果としては最後の選択肢が使われます。例: >
343         /forever\&...
345 "forever" の "for" にマッチします。"fortuin" にはマッチしません。
347 ==============================================================================
348 *27.6*  文字範囲
350 "a"、"b"、"c" のどれかにマッチさせるには "/a\|b\|c" が使えます。しかし "a" か
351 ら "z" までの文字をマッチさせようとするとパターンが長くなってしまいます。簡単
352 な方法があります: >
354         /[a-z]
356 [] は一つの文字にマッチします。マッチさせたい文字を [] の中に指定します。次の
357 ようにして文字を一つずつ指定することもできます: >
359         /[0123456789abcdef]
361 指定された文字の中から一つがマッチします。文字が連続している場合は文字範囲を指
362 定できます。例えば "0-3" は "0123" という意味です。"w-z" は "wxyz" という意味
363 になります。上記の例は次のように短くできます: >
365         /[0-9a-f]
367 文字 "-" 自体をマッチさせたい場合は [] の中の一番最初か最後に書いてください。
368 [] の中では以下の特殊文字が使えます (これらは [] の中でなくても使えます):
370         \e      <Esc>
371         \t      <Tab>
372         \r      <CR>
373         \b      <BS>
375 [] の中では他にも特殊な指定方法が使えます。詳細は |/[]| を参照してください。
378 文字範囲の補集合
379 ----------------
381 マッチして欲しくない文字を指定したい場合は、文字範囲の先頭に "^" を指定します。
382 すると、指定した文字以外の文字がマッチするようになります。例: >
384         /"[^"]*"
386          "        ダブルクオート
387           [^"]    ダブルクオート以外の文字が
388               *   可能な限りたくさん
389                "  ダブルクオート
391 "foo" や "3!x" がマッチします (ダブルクオートもマッチに含まれる)。
394 定義済み文字範囲
395 ----------------
397 一般的な文字範囲はあらかじめ定義されています。
398 例: >
400         /\a
402 アルファベット文字が検索されます。これは "/[a-zA-Z]" と同じです。他にも次のよ
403 うなものがあります:
405         item    matches                  equivalent ~
406         \d      数字                       [0-9]
407         \D      数字以外             [^0-9]
408         \x      16進数の数字          [0-9a-fA-F]
409         \X      16進数の数字以外        [^0-9a-fA-F]
410         \s      空白文字             [      ]     (<Tab>か<Space>)
411         \S      空白文字以外           [^     ]     (<Tab>か<Space>以外)
412         \l      小文字アルファベット       [a-z]
413         \L      小文字アルファベット以外 [^a-z]
414         \u      大文字アルファベット       [A-Z]
415         \U      大文字アルファベット以外 [^A-Z]
417         Note:
418         定義済み文字範囲は普通の文字範囲よりも処理が高速です。
419         これらのアイテムは [] の中では指定できません。つまり "[\d\l]" と書いた
420         としても数字と小文字にはマッチしません。"\(\d\|\l\)" を使ってください。
422 定義済み文字範囲の一覧は |/\s| を参照してください。
424 ==============================================================================
425 *27.7*  文字クラス
427 文字範囲は特定の文字のセットにマッチします。文字クラスも似たようなものですが、
428 検索パターンを変更せずに文字のセットを変更できるという違いがあります。
429 例えば、次のパターンを検索します: >
431         /\f\+
433 "\f" はファイル名に使える文字を表します。つまりこのパターンはファイル名として
434 使える文字列にマッチします。
435 どの文字がファイル名として使えるかはシステムによって異なります。MS-Windows で
436 は "\" が使えますが Unix では使えません。これは 'isfname' オプションで指定され
437 ています。Unix の初期設定: >
439         :set isfname
440         isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=
442 他のシステムでは初期設定が変わります。ファイル名にマッチさせたいときに "\f" を
443 使えば、そのパターンはいろいろなシステムで使えます。
445         Note:
446         Unix では空白などのどんな文字でもファイル名に使えます。'isfname' にそ
447         れらの文字を設定するのは理論的には正しいことです。しかしその場合、テキ
448         ストの中からファイル名を切り出すのが困難になってしまいます。したがっ
449         て、'isfname' の初期設定にはすべての文字は含まれていません。
451 次のような文字クラスがあります:
453         item    matches                         option ~
454         \i      識別子に使える文字               'isident'
455         \I      \iから数字を抜いたもの
456         \k      キーワードとなる文字              'iskeyword'
457         \K      \kから数字を抜いたもの
458         \p      印刷可能文字                  'isprint'
459         \P      \pから数字を抜いたもの
460         \f      ファイル名に使える文字             'isfname'
461         \F      \fから数字を抜いたもの
463 ==============================================================================
464 *27.8*  改行記号にマッチ
466 改行を含んだパターンを検索することができます。改行の位置は明示的に指定する必要
467 があります。今までに説明したパターンアイテムはどれも改行にマッチしません。
468 改行の場所を指定するには "\n" を使います: >
470         /the\nword
472 行末が "the" で終わり、次の行の行頭が "word" になっている行がマッチします。
473 "the word" にもマッチさせたい場合は、スペースと改行の両方をマッチさせる必要が
474 あります。それには "\_s" を使います: >
476         /the\_sword
478 間に空白をいくつでも挟めるようにするには: >
480         /the\_s\+word
482 これは、行末が "the   " で終わり、次の行の行頭が "   word" で始まっているよう
483 な場所にもマッチします。
485 "\s" は空白にマッチします。"\_s" は空白と改行にマッチします。
486 同様に、"\a" はアルファベットにマッチし、"\_a" はアルファベットと改行にマッチ
487 します。他の文字クラスや文字範囲も同様に、"_" を付けることによって改行にもマッ
488 チするようになります。
490 他の多くのパターンアイテムも "\_" を付けることによって改行にマッチさせることが
491 できます。例えば、"\_." は改行を含めたすべての文字にマッチします。
493         Note:
494         "\_.*" はファイル末尾までのすべての文字がマッチします。検索コマンドの
495         動作が遅くなるかもしれないので注意してください。
497 "\_[]" を使うと文字範囲にも改行を追加できます: >
499         /"\_[^"]*"
501 ダブルクオートで囲まれたテキストが検索されます。間には改行も含むことができま
502 す。
504 ==============================================================================
505 *27.9*  例
507 便利そうな検索パターンをいくつか説明します。今までに説明したパターンをどのよう
508 に使えばいいかを示します。
511 カリフォルニア州のナンバープレートを探す
512 ----------------------------------------
514 "1MGU103" という番号を検索してみます。これは一つの数字、三つの大文字アルファ
515 ベット、三つの数字、から成っています。そのままパターンに置き換えてみます: >
517         /\d\u\u\u\d\d\d
519 同じものが並んでいる部分は回数指定に置き換えることができます: >
521         /\d\u\{3}\d\{3}
523 [] 指定を使うこともできます: >
525         /[0-9][A-Z]\{3}[0-9]\{3}
527 あなたならどれを使いますか? どれでも覚えやすいものを使ってください。簡単に覚え
528 られる方法を使う方がそうでないものを頑張って覚えるよりずっと効率がよくなりま
529 す。最後の例は他より長くて実行速度も遅いので、どれでも覚えられるという場合は選
530 択肢から外してください。
533 識別子を見つける
534 ----------------
536 C 言語 (などのほとんどの言語) では、識別子は英文字で始まってその後に英数字が続
537 きます。アンダースコアも使えるかもしれません。次のパターンでそのような文字を検
538 索できます: >
540         /\<\h\w*\>
542 "\<" と "\>" は単語全体をマッチさせるための指定です。"\h" は "[A-Za-z_]" と同
543 じ意味で、"\w" は "[0-9A-Za-z_]" と同じ意味になります。
545         Note:
546         "\<" と "\>" の動作は 'iskeyword' オプションに依存します。例えば "-"
547         が含まれている場合、上記パターンは "ident-" にマッチしません。次のパ
548         ターンを使ってください: >
550                 /\w\@<!\h\w*\w\@!
552         識別子の前後の文字が "\w" にマッチしないかどうかをチェックしています。
553         |/\@<!| と |/\@!| 参照。
555 ==============================================================================
557 次章: |usr_28.txt|  折り畳み
559 Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl: