Merge branch 'MacVim'
[MacVim/KaoriYa.git] / runtime / doc / pattern.jax
blob2960c0303c8e0418152333c10798a7862e7d1aaf
1 *pattern.txt*   For Vim バージョン 7.2.  Last change: 2008 Sep 05
4                   VIM REFERENCE MANUAL    by Bram Moolenaar
7 パターンと検索コマンド                                     *pattern-searches*
9 最も基本的な説明はユーザーマニュアルの |03.9| にあります。
10 27章 |usr_27.txt| にも説明があります。
12 1. 検索コマンド                       |search-commands|
13 2. パターンの定義              |search-pattern|
14 3. Magic                        |/magic|
15 4. パターンの概要              |pattern-overview|
16 5. 量指定子                 |pattern-multi-items|
17 6. 普通のアトム                       |pattern-atoms|
18 7. 大文字と小文字を無視する |/ignorecase|
19 8. 合成文字                 |patterns-composing|
20 9. Perl のパターンとの比較       |perl-patterns|
21 10. マッチしたテキストを強調する|match-highlight|
23 ==============================================================================
24 1. 検索コマンド                                       *search-commands* *E486*
26                                                         */*
27 /{pattern}[/]<CR>       [count] 番目にマッチする {pattern} を前方検索します。
28                         |exclusive|(排他的)
30 /{pattern}/{offset}<CR> [count] 番目にマッチする {pattern} を前方検索し、
31                         |{offset}| 行だけ上/下に移動します。|linewise|(行指向)
33                                                         */<CR>*
34 /<CR>                   [count] 番目にマッチする最終検索パターン|last-pattern|
35                         を、最後に使われた|{offset}|を使って、前方検索します。
37 //{offset}<CR>          [count] 番目にマッチする最終検索パターン|last-pattern|
38                         を、新しい |{offset}| を使って前方検索します。
39                         {offset} を指定しなかった場合、 |{offset}| は使われま
40                         せん。
42                                                         *?*
43 ?{pattern}[?]<CR>       [count] 番目にマッチする {pattern} を後方検索します。
44                         |exclusive|(排他的)
46 ?{pattern}?{offset}<CR> [count] 番目にマッチする {pattern} を後方検索して
47                         |{offset}| 行だけ上/下に移動します。|linewise|(行指向)
49                                                         *?<CR>*
50 ?<CR>                   [count]番目にマッチする最終検索パターン|last-pattern|
51                         を、最後に使われた|{offset}|を使って、後方検索します。
53 ??{offset}<CR>          [count]番目にマッチする最終検索パターン|last-pattern|
54                         を、新しい |{offset}| を使って後方検索します。
55                         {offset} を指定しなかった場合、 |{offset}| は使われま
56                         せん。
59                                                         *n*
60 n                       最後の "/" か "?" を [count] 回繰り返します。
61                         |last-pattern| {Vi: カウントの前置を受け付けません}
63                                                         *N*
64 N                       最後の "/" か "?" を逆方向に [count] 回繰り返します。
65                         |last-pattern| {Vi: カウントの前置を受け付けません}
67                                                         *star* *E348* *E349*
68 *                       [count] 番目にマッチする単語を前方検索します。検索され
69                         る単語は、カーソルに最も近い単語です。次の順番で選択さ
70                         れます:
71                                 1. カーソル位置のキーワード |'iskeyword'|
72                                 2. 現在行の、カーソルの前方のキーワード
73                                 3. カーソル位置の単語 (|WORD|)
74                                 4. 現在行の、カーソルの前方の単語
75                         "/\<keyword\>" と検索するのと同じように、完全なキー
76                         ワードのみ検索されます。|exclusive|(排他的)
77                         {Vi にはない機能です}
78                         'smartcase' ではなく 'ignorecase' の設定が使われます。
80                                                         *#*
81 #                       "*" と同じですが、後方検索します。ポンド記号 (文字コー
82                         ド 163) でも動作します。"#" キーがバックスペースとして
83                         動作する場合は、 Vim を起動する前に "stty erase <BS>"
84                         としてみてください (<BS> は CTRL-Hもしくは本当のバック
85                         スペースです)。  {Vi にはない機能です}
87                                                         *gstar*
88 g*                      "*" と似ていますが "\<" と "\>" を単語の回りに加えませ
89                         ん。つまり単語の一部にマッチするものを検索することもで
90                         きます。  {Vi にはない機能です}
92                                                         *g#*
93 g#                      "#" と似ていますが "\<" と "\>" を単語の回りに加えませ
94                         ん。つまり単語の一部にマッチするものを検索することもで
95                         きます。  {Vi にはない機能です}
97                                                         *gd*
98 gd                      ローカル宣言を検索します。カーソルがローカル変数の上に
99                         ある場合、その変数の宣言にジャンプします。はじめに、
100                         Vim は現在の関数の開始行を検索します ("[[" コマンドと
101                         同じ)。見つからなかった場合は、ファイルの 1 行目に移動
102                         します。見つかった場合は、その場所から空行を後方検索し
103                         ます。そして、"*" コマンドで検索するのと同じように、
104                         キーワードを検索します。このとき、コメントと判断した行
105                         は無視します('comments'オプション参照)。
106                         Note: Vim は文法を実際にチェックしているわけではなく、
107                         キーワードにマッチするものを検索しているだけですので、
108                         これがうまく動作するとは限りません。インクルードされて
109                         いるファイル内も検索したい場合は、|include-search| で
110                         列挙されているコマンドを使ってください。
111                         このコマンドを実行した後、コマンド|n|で次のマッチを前
112                         方検索できます。
113                         {Vi にはない機能です}
115                                                         *gD*
116 gD                      グローバル宣言を検索します。ファイル内で定義されている
117                         グローバル変数の上にカーソルがある場合、その宣言にジャ
118                         ンプします。"gd" と同じですが、このコマンドは常に 1 行
119                         目からキーワードを検索します。
120                         {Vi にはない機能です}
122                                                         *1gd*
123 1gd                     "gd" と同じですが、現在のカーソル位置より前の {} ブ
124                         ロック内を無視します。{Vi にはない機能です}
126                                                         *1gD*
127 1gD                     "gD" と同じですが、現在のカーソル位置より前の {} ブ
128                         ロック内を無視します。{Vi にはない機能です}
130                                                         *CTRL-C*
131 CTRL-C                  現在の(検索)コマンドを中止します。MS-DOSではCTRL-Break
132                         を使ってください |dos-CTRL-Break|。
133                         ノーマルモードでは、入力済みの、まだ実行されていないコ
134                         マンドをすべて中止します。
136                                                         *:noh* *:nohlsearch*
137 :noh[lsearch]           'hlsearch' オプションによる強調表示をやめます。検索コ
138                         マンドを使うか、'hlsearch' をオンに設定すると、再び強
139                         調表示されます。このコマンドはオートコマンド中は機能し
140                         ません。オートコマンドを実行する時に強調表示の状態を保
141                         存し、実行後に元に戻すからです。|autocmd-searchpat|
142                         ユーザー関数を呼び出したときも同様。
144 'incsearch' オプションがオンの場合、検索パターンを入力している途中に、その時点
145 でマッチしているものが強調表示されます。実際に、その場所にカーソルを移動させる
146 には <CR> を打って検索を終了する必要があります。検索を中止するには <Esc> キー
147 を使ってください。
149 'hlsearch' オプションがオンの場合、最後に使った検索パターンは強調表示されます。
150 |:nohlsearch| コマンドを使うと、一時的に強調表示をやめさせることができます。
152                                         *search-offset* *{offset}*
153 上記の検索コマンドは指定されたパターンを検索します。"/" と "?" ではさらにオフ
154 セットを指定できます。オフセットには、行オフセットと文字オフセットの 2 種類あ
155 ります。 {Vi には文字オフセットはありません}
157 オフセットを指定して、マッチした場所から相対的にカーソルを移動できます:
158     [num]       [num]行下、1 桁目に移動
159     +[num]      [num]行下、1 桁目に移動
160     -[num]      [num]行上、1 桁目に移動
161     e[+num]     [num]文字右に、マッチ部分の終わりの場所から移動
162     e[-num]     [num]文字左に、マッチ部分の終わりの場所から移動
163     s[+num]     [num]文字右に、マッチ部分の初めの場所(start)から移動
164     s[-num]     [num]文字左に、マッチ部分の初めの場所(start)から移動
165     b[+num]     [num] 上記 s[+num] と同じ (begin の b)
166     b[-num]     [num] 上記 s[-num] と同じ (begin の b)
167     ;{pattern}  さらに検索する。|//;|を参照。
169 '-' か '+' を指定して [num] を省略した場合は 1 が使われます。'e' を使ってオフ
170 セットを指定した場合、検索は包括的になります (カーソルが移動するであろう位置の
171 文字まで含めて操作の対象になります)。
173 例:
175 パターン            カーソルの位置 ~
176 /test/+1                "test" の 1 行下の 1 桁目
177 /test/e                 "test" の最後
178 /test/s+2               "test" の 's'
179 /test/b-3               "test" の 3 文字前
181 これらのコマンドが演算コマンドに対して使われた場合、現在のカーソル位置から、検
182 索後のカーソル位置までが、操作の対象となります。ただし、行オフセットが指定され
183 た場合は、2 つのカーソル位置の間の行全体が操作の対象となります。
185 パターンを検索して置換する例: >
186         /foo<CR>        "foo" を検索
187         c//e            マッチした文字列を変更
188         bar<Esc>        置換する文字を入力
189         //<CR>          次のマッチへ移動
190         c//e            マッチした文字列を変更
191         beep<Esc>       今度は別の文字で置換
192                         ...
194                                                         *//;* *E386*
195 非常に特殊なオフセットですが、';' に続けて検索コマンドを指定できます。例: >
197    /test 1/;/test
198    /test.*/+1;?ing?
200 一つ目の例は、はじめに次の "test 1" を検索し、それから "test" を検索します。
202 これは、2 つの検索コマンドを分けて実行するのと似ていますが、次の点が違います:
203 - 合わせて 1 つの検索コマンドなので、演算コマンドに対して使うことができます。
204 - "n"、"N" コマンドを使った場合、検索方向は最初の検索コマンドと同じです。
205 - エラーが起きた場合、カーソルはまったく動きません。
207                                                         *last-pattern*
208 最後に使われた検索パターン (最終検索パターン) とオフセットは記憶され、同じ検索
209 を繰り返すのに使うことができます。検索方向を変えたり、カウントを指定したりする
210 こともできます。Note: 記憶されるパターンは 2 つあります。1 つは 'normal' 検索
211 コマンドのパターンです。もう 1 つは置換コマンド ":s" のパターンです。空のパ
212 ターンを使った場合に、それぞれ、以前のパターンが使われます。
214 'magic' オプションは最終検索パターンに影響しません。'magic' を変更しても、最終
215 検索パターンの解釈は変わりません。
216 'ignorecase' オプションは違います。'ignorecase' が変更された場合、最終検索パ
217 ターンは、違うテキストにマッチする可能性があります。
219 'hlsearch' オプションがオンの場合、最終検索パターンにマッチするテキストが強調
220 表示されます。
222 最終検索パターンを消去するには次のようにします: >
223         :let @/ = ""
224 パターンに空文字列をセットしているのではありません。それだと全ての場所にマッチ
225 してしまいます。パターンは本当に消去され、Vim起動直後のように、何もない状態に
226 なります。
228 検索では通常、カーソル下のマッチはスキップされます。そのとき、すぐ隣の文字から
229 検索を開始するのか、スキップしたマッチの後ろから検索を開始するのかは、
230 'cpoptions' の'c' フラグに依存します。|cpo-c|を参照。
231         'c' フラグがある場合:   "/..." は 1 から 3 文字ずつ進みます。
232         'c' フラグがない場合:   "/..." は 1 文字ずつ進みます。
233 検索は行頭から開始され、カーソル位置を過ぎたマッチを見付けるまでスキップされま
234 す。そのため、'c' フラグを含んでいる場合の動作は予想外かもしれません。
235 訳注: aaaaaa
236 訳注: カーソルが 2 桁目にある場合、/aaa は 4 桁目からの aaa にマッチする。
237 訳注: これは、行頭から aaa aaa というマッチの区切りになり、
238 訳注: カーソルを含んだ最初の aaa がスキップされるため。
240 後方検索するときも、検索は行頭から始まり、上述のように 'cpoptions' の 'c' フラ
241 グが使われます。そして、カーソル位置より前でマッチする最後のマッチが使われます。
243 Vi では、":tag" コマンドでタグを検索すると、最終検索パターンは上書きされます。
244 Vim では、'cpoptions' に 't' フラグがある場合のみ、最終検索パターンが上書きさ
245 れます。どちらにしても、検索パターンは常に検索履歴に保存されます。
247 'wrapscan' オプションがオン (初期設定) の場合、検索がバッファーの端に到達した
248 ときに、もう一方の端に移動して検索が継続されます。オフの場合は、後方検索なら
249 バッファーの先頭、前方検索ならバッファーの末尾でストップします。
250 パターンが見つからなかった場合、'wrapscan' がオンのときは、"pattern not found"
251 というメッセージが表示され、カーソルは動きません。オフのときは、後方検索なら
252 "search hit TOP without match"、前方検索なら"search hit BOTTOM without
253 match"、というメッセージが表示されます。
254 'wrapscan' がオンのときに検索がバッファーの端から端へ継続した場合、後方検索な
255 ら"search hit TOP, continuing at BOTTOM"、前方検索なら"search hit BOTTOM,
256 continuing at TOP" というメッセージが表示されます。このメッセージを表示しない
257 ようにするには、'shortmess' オプションに 's' フラグを設定します。メッセージは
258 'highlight' オプションの 'w' で強調表示されます (初期設定: standout)。
260                                                         *search-range*
261 "/" コマンドで検索するとき、\%>l を含めることで検索の範囲を指定できます。
262 例えば、199行目と300行目の間にある "limit" という単語を検索するには次のように
263 します: >
264         /\%>199l\%<300llimit
265 |/\%>l|も参照。
267 他にも、":substitute"コマンドに 'c' フラグをつける方法で、擬似的な範囲内検索が
268 できます。例: >
269    :.,300s/Pattern//gc
270 この例では、カーソル位置から 300 行目までの間で "Pattern" が検索されます。マッ
271 チした場所で、動作を指示するためのキーを入力必要があります。検索を停止するには
272 'q'を、次のマッチを検索するには 'n' を入力します。
274 "*", "#", "g*", "g#" コマンドはカーソルに近い単語を次の順番で検索します。最初
275 に見つかったものが使われます:
276 - カーソル位置のキーワード
277 - 同じ行の、カーソルの右側のキーワード
278 - カーソル位置の単語
279 - 同じ行の、カーソルの右側の単語
280 キーワードは、'iskeyword' で定義されている文字だけを含む文字列です。
281 単語 (|WORD|) は、空白文字 (<Tab> や <Space>) を含まない文字列です。
282 Note: 10本の指を使ってタイプしているなら、このコマンドを覚えるのは簡単です:
283 "#" は左手の中指で押します (左上に向かって検索します)。
284 "*" は右手の中指で押します (右下に向かって検索します)。
285 訳注: これは英語キーボードでの話
287 ==============================================================================
288 2. パターンの定義                      *search-pattern* *pattern* *[pattern]*
289                                         *regular-expression* *regexp* *Pattern*
290                                         *E76* *E383* *E476*
292 初心者の方はユーザーマニュアルの27章 |usr_27.txt| を読んでください。
294                                                 */bar* */\bar* */pattern*
295 1. パターンは、"\|" で分けられた 1 つ以上のブランチからなります。ブランチがど
296    れか 1 つでもマッチすればマッチします。例えば、"foo\|beep" は "foo" と
297    "beep" にマッチします。複数のブランチがマッチした場合は、最初にマッチしたも
298    のが使われます。
300    pattern ::=      branch
301                 or  branch \| branch
302                 or  branch \| branch \| branch
303                 etc.
305                                                 */branch* */\&*
306 2. ブランチは、"\&" で分けられた1つ以上の連接からなります。全ての連接が同じ
307    場所でマッチした場合に限り、最後の連接がマッチします。例:
308         "foobeep\&..." は "foobeep" の "foo" にマッチします。
309         ".*Peter\&.*Bob" は "Peter" と "Bob" が両方ある行でマッチします。
311    branch ::=       concat
312                 or  concat \& concat
313                 or  concat \& concat \& concat
314                 etc.
316                                                 */concat*
317 3. 連接は、連続した 1 つ以上のピースからなります。ピースがすべて、順番どおり
318    マッチした場合にマッチします。たとえば、"f[0-9]b" は最初に "f" にマッチし、
319    次に数字、そして "b" にマッチします。
321    concat  ::=      piece
322                 or  piece piece
323                 or  piece piece piece
324                 etc.
326                                                 */piece*
327 4. ピースはアトムです。アトムが何回マッチするかを指示する、量指定子を後ろに置
328    くことができます。たとえば "a*" はいくつの "a" でもマッチします。
329    ""、"a"、"aa" など。|/multi|を参照。
331    piece   ::=      atom
332                 or  atom  multi
334                                                 */atom*
335 5. アトムはパターンアイテムを構成する要素です。ほとんどのアトムは 1 文字にマッ
336    チします。多くの場合、アトムは普通の文字か文字クラスです。カッコを使ってパ
337    ターンからアトムを作れます。"\z(\)" は構文強調専用です。
339    atom    ::=      ordinary-atom               |/ordinary-atom|
340                 or  \( pattern \)               |/\(|
341                 or  \%( pattern \)              |/\%(|
342                 or  \z( pattern \)              |/\z(|
345 ==============================================================================
346 3. Magic                                                        */magic*
348 パターンの中でリテラルとして扱われる文字は、テキストの同じ文字とマッチします。
349 しかし、バックスラッシュが前置されると、特別な意味を持つようになります。
351 バックスラッシュを前置しなくても特別な意味を持つ文字があります。そのような文字
352 をリテラル文字としてマッチさせるには、バックスラッシュを前置する必要がありま
353 す。
355 ある文字がリテラルとして処理されるかどうかは、オプション'magic'と、以下で説明
356 するアイテムに依存します。
357                                                         */\m* */\M*
358 "\m" を使うと、それ以降のパターンは 'magic' がオンの状態で処理されます。
359 オプション 'magic' の設定よりも優先されます。
360 "\M"を使うと、それ以降のパターンは 'nomagic' の状態で処理されます。
361                                                         */\v* */\V*
362 "\v" を使うと、それ以降の、'0'-'9'、'a'-'z'、'A'-'Z'、'_'、以外のすべての
363 ASCII 文字は特別な意味を持ちます。 "very magic"
365 "\V" を使うと、それ以降はバックスラッシュだけが特別な意味を持ちます。
366 "very nomagic"
368 例:
369 after:    \v       \m       \M       \V         マッチするもの ~
370                 'magic' 'nomagic'
371           $        $        $        \$         行末
372           .        .        \.       \.         何か 1 文字
373           *        *        \*       \*         直前のアトムの繰り返し
374           ()       \(\)     \(\)     \(\)       グループ化してアトムにする
375           |        \|       \|       \|         選択の区切り
376           \a       \a       \a       \a         英字
377           \\       \\       \\       \\         リテラルのバックスラッシュ
378           \.       \.       .        .          リテラルのドット
379           \{       {        {        {          リテラルの "{"
380           a        a        a        a          リテラルの 'a'
382 {\m、\M、\v、\V、はVimだけの機能です}
384 オプション 'magic' は初期設定のままにしておいてください。環境の違いによるトラ
385 ブルを回避できます。パターンが 'magic' の設定に影響されないようにするには、パ
386 ターンの先頭に "\m" か "\M" を置きます。
389 ==============================================================================
390 4. パターンの概要                                      *pattern-overview*
392 量指定子の概要。                                        */multi* *E61* *E62*
393 詳しい説明や使用例は、リンク先を参照してください。                       *E64*
395           量指定子 ~
396      'magic' 'nomagic'  アトムがいくつマッチするか ~
397 |/star| *       \*      0 以上            最長一致
398 |/\+|   \+      \+      1 以上            最長一致 (*)
399 |/\=|   \=      \=      0 か 1           最長一致 (*)
400 |/\?|   \?      \?      0 か 1           最長一致 (*)
402 |/\{|   \{n,m}  \{n,m}  n 以上 m 以下       最長一致 (*)
403         \{n}    \{n}    n               正確に指定した数だけ (*)
404         \{n,}   \{n,}   n 以上            最長一致 (*)
405         \{,m}   \{,m}   0 以上 m 以下       最長一致 (*)
406         \{}     \{}     0 以上            最長一致 (*と同じ) (*)
408 |/\{-|  \{-n,m} \{-n,m} n 以上 m 以下       最短一致 (*)
409         \{-n}   \{-n}   n               正確に指定した数だけ (*)
410         \{-n,}  \{-n,}  n 以上            最短一致 (*)
411         \{-,m}  \{-,m}  0 以上 m 以下       最短一致 (*)
412         \{-}    \{-}    0 以上            最短一致 (*)
414                                                         *E59*
415 |/\@>|  \@>     \@>     1       強欲な量指定子 (*)
416 |/\@=|  \@=     \@=     なし      幅ゼロの肯定先読み |/zero-width| (*)
417 |/\@!|  \@!     \@!     なし      幅ゼロの否定先読み |/zero-width| (*)
418 |/\@<=| \@<=    \@<=    なし      幅ゼロの肯定後読み |/zero-width| (*)
419 |/\@<!| \@<!    \@<!    なし      幅ゼロの否定後読み |/zero-width| (*)
421 (*) {Vi にはない機能です}
424 普通のアトムの概要                                       */ordinary-atom*
425 詳しい説明や使用例は、リンク先を参照してください。
427       アトム ~
428       magic   nomagic   マッチするもの ~
429 |/^|    ^       ^       行頭 (パターンの先頭にある場合だけ) |/zero-width|
430 |/\^|   \^      \^      リテラル文字 '^'
431 |/\_^|  \_^     \_^     行頭 (どこでも使える) |/zero-width|
432 |/$|    $       $       行末 (パターンの末尾にある場合だけ) |/zero-width|
433 |/\$|   \$      \$      リテラル文字 '$'
434 |/\_$|  \_$     \_$     行末 (どこでも使える) |/zero-width|
435 |/.|    .       \.      何か 1 文字 (改行以外)
436 |/\_.|  \_.     \_.     何か 1 文字 (改行含む)
437 |/\<|   \<      \<      単語の先頭 |/zero-width|
438 |/\>|   \>      \>      単語の末尾 |/zero-width|
439 |/\zs|  \zs     \zs     なし。マッチの開始地点を設定します
440 |/\ze|  \ze     \ze     なし。マッチの終了地点を設定します
441 |/\%^|  \%^     \%^     ファイルの先頭 |/zero-width|           *E71*
442 |/\%$|  \%$     \%$     ファイルの末尾 |/zero-width|
443 |/\%V|  \%V     \%V     選択範囲内 |/zero-width|
444 |/\%#|  \%#     \%#     カーソル位置 |/zero-width|
445 |/\%'m| \%'m    \%'m    マーク m の位置 |/zero-width|
446 |/\%l|  \%23l   \%23l   23行目 |/zero-width|
447 |/\%c|  \%23c   \%23c   23列目 |/zero-width|
448 |/\%v|  \%23v   \%23v   23列目 (表示単位) |/zero-width|
450 文字クラス {Vi にはない機能です}:                            */character-classes*
451 |/\i|   \i      \i      識別子文字 (オプション 'isident' を参照)
452 |/\I|   \I      \I      "\i" と同じですが、数字は除外します
453 |/\k|   \k      \k      キーワード文字 (オプション 'iskeyword' を参照)
454 |/\K|   \K      \K      "\k" と同じですが、数字は除外します
455 |/\f|   \f      \f      ファイル名の文字 (オプション 'isfname' を参照)
456 |/\F|   \F      \F      "\f" と同じですが、数字は除外します
457 |/\p|   \p      \p      印字可能文字 (オプション 'isprint' を参照)
458 |/\P|   \P      \P      "\p" と同じですが、数字は除外します
459 |/\s|   \s      \s      空白文字: <Space> と <Tab>
460 |/\S|   \S      \S      空白文字以外。\s の反対です
461 |/\d|   \d      \d      数字                              [0-9]
462 |/\D|   \D      \D      数字以外                    [^0-9]
463 |/\x|   \x      \x      16 進数字                  [0-9A-Fa-f]
464 |/\X|   \X      \X      16 進数字以外                        [^0-9A-Fa-f]
465 |/\o|   \o      \o      8 進数字                   [0-7]
466 |/\O|   \O      \O      8 進数字以外                 [^0-7]
467 |/\w|   \w      \w      単語を構成する文字               [0-9A-Za-z_]
468 |/\W|   \W      \W      単語を構成する文字以外             [^0-9A-Za-z_]
469 |/\h|   \h      \h      単語の先頭の文字                [A-Za-z_]
470 |/\H|   \H      \H      単語の先頭の文字以外              [^A-Za-z_]
471 |/\a|   \a      \a      英字                              [A-Za-z]
472 |/\A|   \A      \A      英字以外                    [^A-Za-z]
473 |/\l|   \l      \l      小文字英字                   [a-z]
474 |/\L|   \L      \L      小文字英字以外                 [^a-z]
475 |/\u|   \u      \u      大文字英字                   [A-Z]
476 |/\U|   \U      \U      大文字英字以外                 [^A-Z]
477 |/\_|   \_x     \_x     x は上記の文字クラスのどれかです。文字クラスと改行が
478                         マッチします。
479 (文字クラスここまで)
481 |/\e|   \e      \e      <Esc>
482 |/\t|   \t      \t      <Tab>
483 |/\r|   \r      \r      <CR>
484 |/\b|   \b      \b      <BS>
485 |/\n|   \n      \n      改行
486 |/~|    ~       \~      最後に置換された文字列
487 |/\1|   \1      \1      最初の \(\) と同じ文字列 {Vi にはない機能です}
488 |/\2|   \2      \2      "\1" と同じですが、2 番目の \(\) を使います
489            ...
490 |/\9|   \9      \9      "\1" と同じですが、9 番目の \(\) を使います
491                                                                 *E68*
492 |/\z1|  \z1     \z1     構文強調専用。|:syn-ext-match|を参照
493            ...
494 |/\z1|  \z9     \z9     構文強調専用。|:syn-ext-match|を参照
496         x       x       特別な意味のない文字は、その文字自身とマッチします
498 |/[]|   []      \[]     [] で囲んだ文字のうちどれか
499 |/\%[]| \%[]    \%[]    任意にマッチするアトム列
501 |/\c|   \c      \c      大文字小文字を無視します。'ignorecase' は使用されない
502 |/\C|   \C      \C      大文字小文字を区別します。'ignorecase' は使用されない
503 |/\m|   \m      \m      以降のパターン文字を 'magic' がオンの状態で処理します
504 |/\M|   \M      \M      以降のパターン文字を 'magic' がオフの状態で処理します
505 |/\v|   \v      \v      以降のパターン文字を "very magic" で処理します
506 |/\V|   \V      \V      以降のパターン文字を "very nomagic" で処理します
507 |/\Z|   \Z      \Z      ユニコードの合成文字かどうかを無視します。
508                         ヘブライ語やアラビア語で母音を検索するときに便利です。
510 |/\%d|  \%d     \%d     10進数指定の特定の文字 (例 \%d123)
511 |/\%x|  \%x     \%x     16進数指定の特定の文字 (例 \%x2a)
512 |/\%o|  \%o     \%o     8進数指定の特定の文字  (例 \%o040)
513 |/\%u|  \%u     \%u     特定のマルチバイト文字 (例 \%u20ac)
514 |/\%U|  \%U     \%U     特定の広範囲のマルチバイト文字 (例 \%U12345678)
516 例                       マッチするもの ~
517 \<\I\i*         or
518 \<\h\w*
519 \<[a-zA-Z_][a-zA-Z0-9_]*
520                         識別子 (例えば C 言語の識別子)
522 \(\.$\|\. \)            <EOL> かスペースの直前のピリオド
524 [.!?][])"']*\($\|[ ]\)  文末。")" コマンドが認識する文末と同じ定義です。
526 cat\Z                   "cat" と "càt" ("a" + 0x0300) にマッチする。
527                         見た目は似ていますが、"càt" (0x00e0)にはマッチしませ
528                         ん。
531 ==============================================================================
532 5. 量指定子 (Multi items)                           *pattern-multi-items*
534 アトムがどのように、何回マッチするかを指示するものを、量指定子 (multi) と呼び
535 ます。概要は |/multi| を参照してください。
537                                                 */star* */\star* *E56*
538 *       ('magic'がオフのときは \* )
539         アトムの 0 回以上の繰り返し。最長一致。
540         Example  'nomagic'      マッチするもの ~
541         a*         a\*          ""、"a"、"aa"、"aaa"、など。
542         .*         \.\*         改行以外の全て (空文字列も)
543         \_.*       \_.\*        バッファの末尾までの全て
544         \_.*END    \_.\*END     一番最後の "END" までの全て
546         例外: パターンの最初と "^" の直後の "*" は、リテラルの "*" にマッチし
547         ます。
549         "\_." の繰り返しには注意してください。たくさんのテキストがマッチして、
550         そして、時間が掛かります。たとえば、"\_.*END" は、カーソルの位置から 1
551         番最後の "END" までのすべてのテキストがマッチします。"*" は最長一致な
552         ので、まずファイルの末尾までスキップして、それから 1 文字ずつ後退しな
553         がら "END" を探します。
555                                                         */\+* *E57*
556 \+      アトムの 1 回以上の繰り返し。最長一致。 {Vi にはない機能です}
557         Example         マッチするもの ~
558         ^.\+$           空行以外の行
559         \s\+            1 文字以上の空白
561                                                         */\=*
562 \=      0 回または 1 回のアトム。最長一致。 {Vi にはない機能です}
563         Example         マッチするもの ~
564         foo\=           "fo" と "foo"
566                                                         */\?*
567 \?      \= と同じ。"?" コマンドによる後方検索では使えません。
568         {Vi にはない機能です}
570                                                 */\{* *E58* *E60* *E554*
571 \{n,m}  アトムの n 以上 m 以下の繰り返し。最長一致
572 \{n}    アトムの n 回         の繰り返し
573 \{n,}   アトムの n 回以上     の繰り返し。最長一致
574 \{,m}   アトムの 0 以上 m 以下の繰り返し。最長一致
575 \{}     アトムの 0 回以上     の繰り返し。最長一致 (*と同じ)
576                                                         */\{-*
577 \{-n,m} アトムの n 以上 m 以下の繰り返し。最短一致
578 \{-n}   アトムの n 回         の繰り返し
579 \{-n,}  アトムの n 回以上     の繰り返し。最短一致
580 \{-,m}  アトムの 0 以上 m 以下の繰り返し。最短一致
581 \{-}    アトムの 0 回以上     の繰り返し。最短一致
582         {すべてViにはない機能です}
584         n と m には 10 進数正数、またはゼロを指定できます。
586                                                                 *non-greedy*
587         "{" の直後に "-" がある場合は、最短一致のアルゴリズムが使われます (下
588         記の例を参照)。特に、"\{-}" は "*" と同じですが、最短一致のアルゴリズ
589         ムが使われます。しかし、早い位置でマッチするものが、短いマッチよりも優
590         先されます。たとえば、"a\{-}b" は "xaaab" の "aaab" にマッチします。
592         Example                 マッチするもの ~
593         ab\{2,3}c               "abbc" または "abbbc"
594         a\{5}                   "aaaaa"
595         ab\{2,}c                "abbc", "abbbc", "abbbbc", etc.
596         ab\{,3}c                "ac", "abc", "abbc" or "abbbc"
597         a[bc]\{3}d              "abbbd"、"abbcd"、"acbcd"、"acccd"、など
598         a\(bc\)\{1,2}d          "abcd" または "abcbcd"
599         a[bc]\{-}[cd]           "abcd" の "abc"
600         a[bc]*[cd]              "abcd" の "abcd"
602         } にバックスラッシュを前置するかどうかは任意です: \{n,m\}
604                                                         */\@=*
605 \@=     幅ゼロの肯定先読み。{Vi にはない機能です}
606         Perl の "(?=pattern)" と同じです。
607         Example                 マッチするもの ~
608         foo\(bar\)\@=           "foobar" の "foo"
609         foo\(bar\)\@=foo        なにもマッチしない
610                                                         */zero-width*
611         "\@=" (や、"^"、"$"、"\<"、"\>"、など) を使った場合、その文字はマッチ
612         に含まれません。これらのアイテムは、マッチすることができるかどうかの
613         チェックだけに使われます。続くアイテムが同じ場所でマッチすることに注意
614         してください。上記の最後の例は "foobarfoo" にはマッチしません。"bar"
615         がマッチしたのと同じ場所で "foo" とマッチしようとするからです。
617         Note: "\&" は "\@=" と同じような働きをします。"foo\&.." と
618         "\(foo\)\@=.." は同じです。カッコを書かなくていいので "\&" の方が簡単
619         です。
622                                                         */\@!*
623 \@!     幅ゼロの否定先読み。 |/zero-width| {Vi にはない機能です}
624         Perl の "(?!pattern)" と同じです。
625         Example                 マッチするもの ~
626         foo\(bar\)\@!           後ろに "bar" のない "foo"
627         a.\{-}p\@!              後ろに "p" のない "a"、"ap"、"app"、など
628         if \(\(then\)\@!.\)*$   後ろに "then" のない "if"
630         "\@!" を使うには注意が必要です。パターンにマッチしない場所、というのは
631         そこらじゅうにあるからです。"a.*p\@!" は "a" から行末までマッチしま
632         す。なぜなら、".*" が全ての文字にマッチし、"p" は行末にマッチしないか
633         らです。"a.\{-}p\@!" は後ろに "p" のない文字列、"a"、"ap"、"aap"、など
634         にマッチします。なぜなら、"." が "p" にもマッチし、"p\@!" がその後ろに
635         マッチする(つまり "p" がマッチしない) からです。
637         直前がマッチしないことを調べるために "\@!" を使うことはできません。
638         "\(foo\)\@!bar" は "foobar" の "bar" にマッチします。なぜなら、"foo"
639         がマッチしなかった場所で、"bar" がマッチするからです。"foobar" がマッ
640         チしないように、"\(foo\)\@!...bar" とすることもできますが、これは行頭
641         の "bar" にはマッチしません。"\(foo\)\@<!bar" を使ってください。
643                                                         */\@<=*
644 \@<=    幅ゼロの肯定後読み。|/zero-width| {Vi にはない機能です}
645         Perl の "(?<=pattern)" と同じですが、Vimでは可変長パターンも使えます。
646         Example                 マッチするもの ~
647         \(an\_s\+\)\@<=file     "an" と空白文字 (改行含む) の後の "file"
649         処理速度を気にするなら、この量指定子は避けたほうが無難です。代わりに
650         "\zs" を使ってください |/\zs|。次のものは上記の例と同じものにマッチし
651         ます:
652                 an\_s\+\zsfile
654         "\@<=" と "\@<!" は直前の文字がマッチしているかどうかをチェックしま
655         す。理論上は、マッチの現在位置よりも前ならどこでもマッチできます。しか
656         し、処理時間を制限するために、マッチの現在行と、(もしあれば) 1 つ前の
657         行だけが検索されます。ほとんどの場合はこれで十分ですし、遅くなり過ぎる
658         こともありません。
659         "\@<=" や "\@<!" の後にくるパターンは最初にチェックされます。そのため、
660         "\1" のような、\(\) の前方参照は機能しません。そのときは次のようにしま
661         す:
662         Example                 マッチするもの ~
663         \1\@<=,\([a-z]\+\)      "abc,abc" の ",abc"
665                                                         */\@<!*
666 \@<!    幅ゼロの否定後読み。マッチの現在位置の直前の文字列が、アトムにマッチし
667         ない場合にマッチします。現在行と 1 つ前の行だけがチェックされます。
668         |/zero-width| {Vi にはない機能です}
669         Perl の "(?<!pattern)" と同じですが、Vimでは可変長パターンも使えます。
670         対象のアトムは、続くアトムの直前までがマッチの範囲になるため、最後が
671         ".*" で終わっているアトムも機能します。
672         注意: これは遅くなることがあります (マッチするかどうかを多くの場所で
673         チェックする必要があるため)。
674         Example                 マッチするもの ~
675         \(foo\)\@<!bar          "foobar" 以外の "bar"
676         \(\/\/.*\)\@<!in        "//" の後ろ以外の "in"
678                                                         */\@>*
679 \@>     強欲な量指定子。 {Vi にはない機能です}
680         Perlの "(?>pattern)" と同じです。
681         Example         マッチするもの ~
682         \(a*\)\@>a      なにもマッチしない ("a*" が全ての "a" を取るので、その
683                         後に "a" があることはありません)
685         パターンがそのアトムだけであるかのようにマッチします。そして、パターン
686         全体がマッチしなくても、そのアトムのマッチを短くして再トライしたりはし
687         ません (バックトラックしません)。次の違いに注意してください。"a*b" と
688         "a*ab" は両方とも "aaab" にマッチします。このとき、後者の "a*" は先頭
689         の "aa" にマッチしています。"\(a*\)\@>ab" は "aaab" にマッチしません。
690         なぜなら、"a*"が"aaa"にマッチする (最長一致する) ため、"ab" がマッチで
691         きないからです。
694 ==============================================================================
695 6.  普通のアトム                                      *pattern-atoms*
697 普通のアトムは次のものです:
699                                                         */^*
700 ^       パターンの先頭にある場合、行頭にマッチします。"\|"、"\("、"\%(" の直後
701         でも構いません。他の場所にある場合は、リテラル文字の '^' にマッチしま
702         す。|/zero-width|
703         Example         マッチするもの ~
704         ^beep(          (おそらく) C 言語の関数 "beep" の開始。
706                                                         */\^*
707 \^      リテラル文字 '^' にマッチします。パターンのどの場所でも使えます。
709                                                         */\_^*
710 \_^     行頭にマッチします。|/zero-width| パターンのどの場所でも使えます。
711         Example         マッチするもの ~
712         \_s*\_^foo      空白文字や空行の直後の、行頭の "foo"
714                                                         */$*
715 $       パターンの末尾、または "\|"、"\)"、"\n" ('magic' on時) の前にある場
716         合、行末 (<EOL>) にマッチします。他の場所にある場合は、リテラル文字の
717         '$' にマッチします。 |/zero-width|
719                                                         */\$*
720 \$      リテラル文字の '$' にマッチします。パターンのどの場所でも使えます。
722                                                         */\_$*
723 \_$     行末にマッチします。|/zero-width| パターンのどの場所でも使えます。
724         Note: "a\_$b" はどこにもマッチしません。"b" は行末とはマッチしないから
725         です。代わりに、"a\nb" を使ってください |/\n|。
726         Example         マッチするもの ~
727         foo\_$\_s*      行末の "foo" と、それに続く空白や空行
729 .       ('nomagic'なら \.)                                */.* */\.*
730         改行以外のすべての文字がマッチします。
732                                                         */\_.*
733 \_.     改行も含め、すべての文字がマッチします。
734         注意: "\_.*" はバッファの末尾までのすべてのテキストがマッチします。
736                                                         */\<*
737 \<      単語の先頭にマッチします。このアトムの次の文字は単語の 1 文字目です。
738         どの文字が単語を構成するかは、オプション 'iskeyword' で設定します。
739         |/zero-width|
741                                                         */\>*
742 \>      単語の末尾にマッチします。このアトムの前の文字は単語の最後の文字です。
743         どの文字が単語を構成するかは、オプション 'iskeyword' で設定します。
744         |/zero-width|
746                                                         */\zs*
747 \zs     どこにでもマッチして、マッチの開始地点を設定します。このアトムの次の文
748         字は、マッチした文字列の 1 文字目です。|/zero-width|
749         例: >
750                 /^\s*\zsif
751 <       これは、行頭からスペースを無視して、"if" にマッチします。
752         複数回の繰り返しで使った場合は、最後にマッチしたものが使われます。
753         例: >
754                 /\(.\{-}\zsFab\)\{3}
755 <       これは、3 番目に現れた "Fab" にマッチします。
756         {Vi にはない機能です} {|+syntax|が有効な場合のみ利用できます}
757                                                         */\ze*
758 \ze     どこにでもマッチして、マッチの末尾を設定します。このアトムの前の文字
759         は、マッチした文字列の最後の文字です。|/zero-width|
760         複数回の繰り返しで使った場合は、最後にマッチしたものが使われます。
761         例: >
762                 /end\ze\(if\|for\)
763 <       これは、"endif" または "endfor" の "end" にマッチします。
764         {Vi にはない機能です} {|+syntax|が有効な場合のみ利用できます}
766                                                 */\%^* *start-of-file*
767 \%^     ファイルの先頭にマッチします。文字列 (|expr-string|) とマッチングする
768         場合は、文字列の先頭にマッチします。{Vi にはない機能です}
769         例: >
770                 /\%^\_.\{-}\zsVIM
771 <       これは、ファイルの最初にある "VIM" にマッチします。
773                                                 */\%$* *end-of-file*
774 \%$     ファイルの末尾にマッチします。文字列 (|expr-string|) とマッチングする
775         場合は、文字列の末尾にマッチします。{Vi にはない機能です}
776         Note: 次のパターンでは、ファイルの最後の "VIM" を検索できません: >
777                 /VIM\_.\{-}\%$
778 <       これは、カーソル位置から次の "VIM" を検索します。"VIM" の後の
779         "\_.\{-}\%$" が常にマッチするからです。ファイルの最後の "VIM" を検索す
780         るには、次のようにします: >
781                 /VIM\ze\(\(VIM\)\@!\_.\)*\%$
782 <       "VIM" の後に "VIM" がないことを確実にするために|/\@!|を使っています。
783         ファイルの末尾から後方検索する方が簡単です。
785                                                 */\%V*
786 \%V     選択範囲内にマッチします。ビジュアルモードでないときは、|gv| で再選択
787         できる範囲にマッチします。
788         これはゼロ幅マッチ |/zero-width| です。パターンを選択範囲内でマッチさ
789         せたい場合は、パターンの最初と最後にこれを指定してください。例: >
790                 /\%Vfoo.*bar\%V
791 <       カレントバッファでのみ機能します。
793                                                 */\%#* *cursor-position*
794 \%#     カーソルの位置にマッチします。ウィンドウに表示されているバッファ内で
795         マッチングする場合のみ機能します。{Vi にはない機能です}
796         注意: パターンが使われた後で、カーソルを移動した場合、マッチの結果は正
797         確ではなくなってしまいます。マッチの結果は自動的に更新されません。これ
798         は特に、構文強調と 'hlsearch' に関係します。
799         カーソルが移動しても、表示は自動的に更新されません。表示が更新されるの
800         は、行を変更したため行全体が更新されたときや、|CTRL-L| コマンドを使っ
801         てスクリーン全体を更新したときです。カーソル位置の単語を強調表示するに
802         は次のようにします: >
803                 /\k*\%#\k*
804 <       'hlsearch' をオンにして、カーソルを移動し、テキストを変更してみて、表
805         示が更新されるかどうか確認してください。
807                                                 */\%'m* */\%<'m* */\%>'m*
808 \%'m    マーク m の位置にマッチします。
809 \%<'m   マーク m より前の位置にマッチします。
810 \%>'m   マーク m より後の位置にマッチします。
811         例えば、マーク 's から 'e までを強調するには次のようにします: >
812                 /.\%>'s.*\%<'e..
813 <       Note: マーク 'e の位置をマッチに含めるには 'e の後に二つのドットが必要
814         です。なぜなら、"\%<'e" はマーク 'e の前の文字にマッチし、そしてそれは
815         ゼロ幅マッチ|/zero-width| なので、その文字は結果に含まれないからです。
816         {Vi にはない機能です}
817         注意: マークを検索した後にマークを移動した場合、その結果は正しくなくな
818         ります。Vim は自動的にマッチの強調表示を更新したりしません。
819         |\%#| で検索した後にカーソルを動かした場合と似ています。
821                                                 */\%l* */\%>l* */\%<l*
822 \%23l   指定した行にマッチします。
823 \%<23l  指定した行より上にマッチします。
824 \%>23l  指定した行より下にマッチします。
825         この 3 つを使って、バッファの特定の行にマッチできます。"23" の所に行番
826         号を指定してください。先頭の番号は 1 です。{Vi にはない機能です}
827         注意: 行を挿入したり削除したりしても、マッチの結果は自動的に更新されま
828         せん。そのため、このアトムを使った構文強調は、すぐに誤った表示になって
829         しまいます。
830         現在行を強調表示するには次のようにします: >
831                 :exe '/\%' . line(".") . 'l.*'
832 <       'hlsearch' をオンにして、カーソルを移動し、テキストを変更してみて、表
833         示が更新されるかどうか確認してください。
835                                                 */\%c* */\%>c* */\%<c*
836 \%23c   指定した列にマッチします。
837 \%<23c  指定した列より前にマッチします。
838 \%>23c  指定した列より後にマッチします。
839         この 3 つを使って、バッファの特定の列にマッチできます。"23" の所に列番
840         号を指定してください。先頭の番号は 1 です。実際には、何バイト目かを指
841         定するので、マルチバイト文字を扱うときには、"列番号" という表現は正確
842         ではありません。{Vi にはない機能です}
843         注意: 行を挿入したり削除したりしても、マッチの結果は自動的に更新されま
844         せん。そのため、このアトムを使った構文強調は、すぐに誤った表示になって
845         しまいます。
846         カーソル位置の列を強調表示するには次のようにします: >
847                 :exe '/\%' . col(".") . 'c'
848 <       'hlsearch' をオンにして、カーソルを移動し、テキストを変更してみて、表
849         示が更新されるかどうか確認してください。
850         44 バイト目を強調表示するには次のようにします: >
851                 /\%>43c.\%<46c
852 <       Note: "." が 44 バイト目にマッチした場合、"%<46c" は 45 列目にマッチし
853         ます。
854                                                 */\%v* */\%>v* */\%<v*
855 \%23v   指定した表示列にマッチします。
856 \%<23v  指定した表示列より前にマッチします。
857 \%>23v  指定した表示列より後にマッチします。
858         この 3 つを使って、バッファの特定の表示列にマッチできます。文字列
859         (|expr-string|) とマッチングするときは、カレントウィンドウの、
860         'tabstop' などの設定が使われます。
861         "23" の所に表示列番号を指定してください。先頭の番号は 1 です。
862         Note: Tab 文字や全角文字などの、複数列で表示される文字の途中の列を指定
863         した場合は、マッチしません {Vi にはない機能です}
864         注意: 行を挿入したり削除したりしても、マッチの強調表示は自動的に更新さ
865         れません。そのため、このアトムを使った構文強調は、すぐに誤った表示に
866         なってしまいます。
867         表示列の72桁目以降のすべての文字を強調表示するには次のようにします: >
868                 /\%>72v.*
869 <       'hlsearch' をオンにして、カーソルを移動し、テキストを変更してみて、表
870         示が更新されるかどうか確認してください。
871         次のものはテキストの 17 列までマッチします: >
872                 /.*\%17v
873 <       17 桁目の文字はマッチに含まれません。"\%17v" はマッチしますが、それは
874         幅ゼロのマッチだからです |/zero-width|。
875         17 桁目もマッチに含めるには次のようにします: >
876                 /.*\%<18v
878 文字クラス: {Vi にはない機能です}
879 \i      識別子文字 ('isident'参照)                     */\i*
880 \I      "\i" と同じですが、数字は除外します            */\I*
881 \k      キーワード文字 ('iskeyword'参照)         */\k*
882 \K      "\k" と同じですが、数字は除外します            */\K*
883 \f      ファイル名の文字 ('isfname'参照)          */\f*
884 \F      "\f" と同じですが、数字は除外します            */\F*
885 \p      印字可能文字 ('isprint'参照)                    */\p*
886 \P      "\p" と同じですが、数字は除外します            */\P*
888 NOTE: 上記のものはマルチバイト文字に対しても機能します。次のものは、示された範
889 囲の ASCII 文字だけがマッチします。
891                                                 *whitespace* *white-space*
892 \s      空白文字: <Space> と <Tab>                   */\s*
893 \S      空白文字以外。\s の反対です                 */\S*
894 \d      数字:                             [0-9]           */\d*
895 \D      数字以外:                   [^0-9]          */\D*
896 \x      16 進数字:                 [0-9A-Fa-f]     */\x*
897 \X      16 進数字以外:                       [^0-9A-Fa-f]    */\X*
898 \o      8 進数字:                  [0-7]           */\o*
899 \O      8 進数字以外:                        [^0-7]          */\O*
900 \w      単語を構成する文字:              [0-9A-Za-z_]    */\w*
901 \W      単語を構成する文字以外:            [^0-9A-Za-z_]   */\W*
902 \h      単語の先頭の文字:               [A-Za-z_]       */\h*
903 \H      単語の先頭の文字以外:             [^A-Za-z_]      */\H*
904 \a      英字:                             [A-Za-z]        */\a*
905 \A      英字以外:                   [^A-Za-z]       */\A*
906 \l      小文字英字:                  [a-z]           */\l*
907 \L      小文字英字以外:                        [^a-z]          */\L*
908 \u      大文字英字:                  [A-Z]           */\u*
909 \U      大文字英字以外:                        [^A-Z]          */\U*
911         NOTE: これらのアトムは |/[]| を使うよりも高速です。
913         NOTE: 'ignorecase'、"\c"、"\C" は、文字クラスには影響しません。
915                         */\_* *E63* */\_i* */\_I* */\_k* */\_K* */\_f* */\_F*
916                         */\_p* */\_P* */\_s* */\_S* */\_d* */\_D* */\_x* */\_X*
917                         */\_o* */\_O* */\_w* */\_W* */\_h* */\_H* */\_a* */\_A*
918                         */\_l* */\_L* */\_u* */\_U*
919 \_x     x は上記の文字クラスのどれかです。文字クラスと改行がマッチします。
920 (文字クラスここまで)
922 \e      <Esc> にマッチします                           */\e*
923 \t      <Tab> にマッチします                           */\t*
924 \r      <CR> にマッチします                            */\r*
925 \b      <BS> にマッチします                            */\b*
926 \n      改行にマッチします                               */\n*
927         バッファのテキストではなく、文字列 (|expr-string|) とマッチングすると
928         きは、リテラルの改行文字がマッチします。
930 ~       最後に置換された文字列とマッチします              */~* */\~*
932 \(\)    パターンをカッコでまとめます                  */\(* */\(\)* */\)*
933         たとえば、"\(^a\)" は行頭の 'a' にマッチします。    *E51* *E54* *E55*
935 \1      \( と \) に囲まれた最初の部分正規表現が         */\1* *E65*
936         マッチした文字列と同じ文字列にマッチします。{Vi にない機能です}
937         たとえば、"\([a-z]\).\1" は "ata"、"ehe"、"tot"、などにマッチします。
938 \2      "\1" と同じですが、2 番目の部分正規表現を使います    */\2*
939    ...                                                          */\3*
940 \9      "\1" と同じですが、9 番目の部分正規表現を使います    */\9*
941         Note: 部分正規表現の番号は、最初の "\(" から数えて、左から右へ、順番に
942         番号が付けられます。マッチする順番ではありません。
944 \%(\)   パターンをカッコでまとめます                  */\%(\)* */\%(* *E53*
945         \(\) と同じですが、部分正規表現としてカウントされません。たくさんのグ
946         ループを作ることができますし、処理が少し高速です。
947         {Vi にはない機能です}
949 x       特別な意味のない文字は、その文字自身とマッチします
951                                                         */\* */\\*
952 \x      バックスラッシュと文字の組合せで、現在、特別な意味を持っていない文字
953         は、将来の拡張のために予約されています。
955 []      ('nomagic' のときは \[])    */[]* */\[]* */\_[]* */collection*
956 \_[]
957         コレクションです。複数の文字を角カッコで囲みます。コレクションに含まれ
958         る任意の 1 文字とマッチします。
959         Example         マッチするもの ~
960         [xyz]           'x'、'y'、'z' のどれか
961         [a-zA-Z]$       行末の英字
962         \c[a-z]$        同上
964                                                                 */[\n]*
965         "\_" を付けた場合、コレクションは改行も含みます。コレクションに "\n"
966         を含めた場合と同じですが、"\_" を付けた場合は、コレクションの先頭が
967         "^" の場合でも改行にマッチします。つまり、"\_[^ab]" は "a" と "b" と改
968         行にマッチします。
969         これは Vi 互換です。"\_" や "\n" を使わなければ、改行にはマッチしませ
970         ん。
972                                                                 *E769*
973         ']' がない場合、Vim はエラーを表示せず、コレクションが使われているので
974         はないと判断します。'[' を検索するときに便利です。しかし、Vim 内部での
975         検索では E769 のエラーがでます。
976         When the ']' is not there Vim will not give an error message but
977         assume no collection is used.  Useful to search for '['.  However, you
978         do get E769 for internal searching.
980         コレクション文字列の先頭が "^" の場合、 コレクションに含まれている文字
981         以外の文字がマッチします。"[^xyz]" は 'x'、'y'、'z' 以外の文字にマッチ
982         します。
983         - 2 つの文字で '-' を挟んで 、ASCII 文字の範囲を指定できます。たとえ
984           ば、"[0-9]" はすべての数字にマッチします。
985         - 文字クラス表現を使って、その文字クラスが含んでいる文字を取り込むこと
986           ができます。次の文字クラスがサポートされています。
987                           名前            含んでいるもの ~
988 *[:alnum:]*               [:alnum:]     英数字
989 *[:alpha:]*               [:alpha:]     英字
990 *[:blank:]*               [:blank:]     スペースと Tab 文字
991 *[:cntrl:]*               [:cntrl:]     コントロール文字
992 *[:digit:]*               [:digit:]     10 進数字
993 *[:graph:]*               [:graph:]     スペース以外の印字可能文字
994 *[:lower:]*               [:lower:]     小文字英字 ('ignorecase' がオンのとき
995                                         はすべての英字)
996 *[:print:]*               [:print:]     スペースを含む印字可能文字
997 *[:punct:]*               [:punct:]     句読点
998 *[:space:]*               [:space:]     空白文字 (スペース、Tab、改ページ文字)
999 *[:upper:]*               [:upper:]     大文字英字 ('ignorecase' がオンのとき
1000                                         はすべての英字)
1001 *[:xdigit:]*              [:xdigit:]    16 進数字
1002 *[:return:]*              [:return:]    <CR> 文字
1003 *[:tab:]*                 [:tab:]       <Tab> 文字
1004 *[:escape:]*              [:escape:]    <Esc> 文字
1005 *[:backspace:]*           [:backspace:] <BS> 文字
1006           角カッコで囲んだ文字クラス表現を、コレクションの角カッコ内に書きま
1007           す。たとえば、"[-./[:alnum:]_~]\+" は、UNIX のファイル名として妥当な
1008           パターンです。このパターンは、'-'、'.'、'/'、英数字、'_'、'~'、のど
1009           の文字の組合せでも、1 文字以上の文字列にマッチします。
1010           これらのものは、8 ビット文字のみマッチします。
1011                                                         */[[=* *[==]*
1012         - 等価クラス。これはその文字とほぼ同じ文字にマッチします。例えば、アク
1013           セントを無視するなど。次のように書きます:
1014                 [=a=]
1015           現在、これは latin1 でのみ利用できます。utf-8 と latin9 での latin1
1016           の文字も機能します。
1017                                                         */[[.* *[..]*
1018         - 照合要素。現在は中に一文字だけ指定できます:
1019                 [.a.]
1020                                                           */\]*
1021         - リテラル文字の ']'、'^'、'-'、'\' をコレクションに含めるには、バック
1022           スラッシュを前置して、"[xyz\]]"、"[\^xyz]"、"[xy\-z]"、"[xyz\\]" と
1023           書きます。
1024           Note: POSIX ではこのようなバックスラッシュの使い方はサポートされてい
1025           ません。
1026           ']' は、コレクションの先頭、または '^' の直後にそのまま書いて、
1027           "[]xyz]" や "[^]xyz]" とすることができます。
1028           {Vi にはない機能です}
1029           '-' も、先頭や末尾にそのまま書いて、"[-xyz]"、"[^-xyz]"、"[xyz-]"、
1030           とすることができます。'\' も、この文字 "^]-\bertn" 以外の文字の前で
1031           は、そのまま書けます。"[\xyz]" は、'\'、'x'、'y'、'z'、の文字にマッ
1032           チします。しかし、常に "\\" と書くようにした方がいいでしょう。'\' と
1033           何かの文字の組合せは、将来、拡張に使われる可能性があります。
1034         - 'cpoptions' が 'l' フラグを含んでいない場合、次のものが特別に解釈さ
1035           れます。{Vi にはない機能です}:
1036                 \e      <Esc>
1037                 \t      <Tab>
1038                 \r      <CR>    (改行文字ではありません)
1039                 \b      <BS>
1040                 \n      改行。|/[\n]| 参照。
1041                 \d123   10進数の文字番号
1042                 \o40    8 進数の文字番号 (最大値 0377)
1043                 \x20    16進数の文字番号 (最大値 0xff)
1044                 \u20AC  16進数のマルチバイト文字番号 (最大値 0xffff)
1045                 \U1234  16進数のマルチバイト文字番号 (最大値 0xffffffff)
1046           NOTE: 他のバックスラッシュによる特殊文字の表記は、[] の中では機能し
1047           ません。
1048         - コレクションを使ったマッチングは遅くなることがあります。 コレクショ
1049           ンの文字と、テキストの文字を、それぞれ 1 文字ずつ比較する必要がある
1050           からです。同じ意味のアトムが他にある場合は、それを使ってください。た
1051           とえば、"\d" は "[0-9]" よりも速く、同じ文字にマッチします。
1053                                                 */\%[]* *E69* *E70* *E369*
1054 \%[]    任意にマッチするアトム列です。これは常にマッチします。アトム単位で最長
1055         一致し、最初にアトムがマッチしなかったところでストップします。例: >
1056                 /r\%[ead]
1057 <       これは、"r"、"re"、"rea"、"read" にマッチします。1 番長いマッチが使わ
1058         れます。Ex コマンドの "function" は、"fu" が必須で、"nction" は省略可
1059         能ですが、次の例は、そのようなものにマッチします: >
1060                 /\<fu\%[nction]\>
1061 <       "full" の "fu" にマッチするようなことがないように、単語末尾のアトム
1062         "\>" が使われています。使う機会はあまりないかもしれませんが、普通の文
1063         字以外のアトムを使って、さらに複雑なものも表現できます。例: >
1064                 /\<r\%[[eo]ad]\>
1065 <       これは、"r"、"re"、"ro"、"rea"、"roa"、"read"、"road" にマッチします。
1066         [] の中では \(\)、\%(\)、\z(\) は使えません。\%[] はネストできません。
1067         "[" を含めるには "[[]" を、"]" を含めるには "[]]" を使ってください。
1068         例: >
1069                 /index\%[[[]0[]]]
1070 <       これは "index"、"index["、"index[0"、"index[0]" にマッチします。
1071         {|+syntax| が有効な場合のみ利用可能}
1073                                 */\%d* */\%x* */\%o* */\%u* */\%U* *E678*
1075 \%d123  10進数で指定した文字にマッチします。このアトムの後ろには数字以外の文字
1076         を置いてください。
1077 \%o40   8 進数で指定した文字にマッチします (最大値 0377)。040 より小さい値を指
1078         定するとき、このアトムの後ろには8進数字以外の文字か、数字以外の文字を
1079         置いてください。
1080 \%x2a   16進数で指定した文字にマッチします。2桁まで。
1081 \%u20AC 16進数で指定した文字にマッチします。4桁まで。
1082 \%U1234abcd     16進数で指定した文字にマッチします。8桁まで。
1084 ==============================================================================
1085 7. 大文字と小文字を無視する                                 */ignorecase*
1087 オプション 'ignorecase' がオンの場合、普通の英字の大文字と小文字の違いは無視さ
1088 れます。'smartcase' がオンの場合、パターンが大文字を含んでいないときだけ、大文
1089 字と小文字が無視されます。
1090                                                         */\c* */\C*
1091 "\c" はパターン中のどこにでも置くことができ、パターン全体が、'ignorecase' をオ
1092 ンにした状態で処理されます。実際の 'ignorecase' と 'smartcase' の設定は無視さ
1093 れます。"\C" は "\c" の反対の意味で、大文字と小文字は必ず区別されます。
1094 {Vim だけが \c と \C をサポートしています}
1095 Note: 'ignorecase'、"\c"、"\C" は、文字クラスには作用しません。
1097 例:
1098       パターン      'ignorecase'  'smartcase'       マッチするもの ~
1099         foo       off           -               foo
1100         foo       on            -               foo Foo FOO
1101         Foo       on            off             foo Foo FOO
1102         Foo       on            on                  Foo
1103         \cfoo     -             -               foo Foo FOO
1104         foo\C     -             -               foo
1106 技術的な説明:                                 *NL-used-for-Nul*
1107 ファイル中の <Nul> 文字は、<NL> 文字としてメモリに保存され、ディスプレイには
1108 "^@" と表示されます。これは、ファイルを読み書きする時に変換されます。検索パ
1109 ターンに <Nul> をマッチさせるには、CTRL-@ か "CTRL-V 000" を入力します。この動
1110 作はそれほど違和感がないはずです。検索パターンの <Nul> 文字は内部で <NL> に変
1111 換されています。CTRL-V CTRL-J をタイプした場合も <NL> が入力されるので、ファイ
1112 ル中の <Nul> を検索するのに使えますが、この動作は不自然に感じるかもしれませ
1113 ん。{Vi はファイル中の <Nul> 文字を扱えません}
1115                                                 *CR-used-for-NL*
1116 'fileformat' が "mac" の場合、ファイル中の <NL> は内部では <CR> で保存され、テ
1117 キストの中では "^J" として表示されます。他では、<NL> と <Nul> の場合と同じよう
1118 に扱われます。
1120 スクリプトでは、パターン中の <NL> は、文字列中の <NL> とマッチします。"\n" (
1121 バックスラッシュと n) は <NL> とはマッチしません。バッファ中のテキストとのマッ
1122 チの場合のみ、"\n" は改行とマッチします。
1124                                                 *pattern-multi-byte*
1125 マルチバイト文字を使ったパターンは、たいていは、ユーザーが期待したとおりに機能
1126 します。しかし、不正なバイトでトラブルが起こることもあります。不正なバイトを含
1127 むパターンはおそらく、決してマッチしません。
1129 ==============================================================================
1130 8. Composing characters                                 *patterns-composing*
1132                                                         */\Z*
1133 パターンに "\Z" が含まれている場合、合成文字は無視されます。そのため、どの合成
1134 文字が、いくつ結合されていても、基底文字とマッチするだけでマッチします。
1135 'encoding' が "utf-8" の場合だけ使用します。
1137 合成文字と合成されないアイテムの直後に合成文字がある場合、その合成文字を含んで
1138 いるすべての文字がマッチします。
1139 訳注: x が合成文字として /x/  /\(x\)/  /\zsx/ など
1141 ドットと合成文字を使うと、どの文字に合成されていても、その合成文字にマッチしま
1142 す。
1143 訳注: x が合成文字として /.x/ と書く
1145 合成文字の順番を変更して文字の外見が変わらなかったとしても、合成文字の順番は重
1146 要です。これは将来変更されるかもしれません。
1148 ==============================================================================
1149 9. Perl のパターンとの比較                               *perl-patterns*
1151 Vim と Perl の正規表現は、とても似ていて、同じ事ができます。違いは表記だけで
1152 す。違いの要約を示します:
1154 効果                              Vim の表記 Perl の表記 ~
1155 ----------------------------------------------------------------
1156 大文字と小文字を区別しない   \c              (?i)
1157 大文字と小文字を区別する    \C              (?-i)
1158 前方参照しないグループ             \%(atom\)       (?:atom)
1159 最短一致の量指定子               \{-n,m}         *?, +?, ??, {}?
1160 幅ゼロの肯定先読み               atom\@=         (?=atom)
1161 幅ゼロの否定先読み               atom\@!         (?!atom)
1162 幅ゼロの肯定後読み               atom\@<=        (?<=atom)
1163 幅ゼロの否定後読み               atom\@<!        (?<!atom)
1164 強欲な量指定子                 atom\@>         (?>atom)
1166 Vim と Perl では文字列中の改行の扱いが少し違います:
1168 Perl では、'^' と '$' はテキストの最先頭と最末尾にマッチしますが、'm' フラグを
1169 使うと、テキストの中間の改行にもマッチするようになります。's' フラグを使うと、
1170 '.' が改行にもマッチするようなります。'm' と 's' のフラグは、上記の(?i) フラグ
1171 のように、パターン中で設定することもできます。
1173 Vim では、'^' と '$' は常に中間の改行にもマッチします。最先頭と最末尾にはそれ
1174 ぞれ、'\%^' と '\%$' がマッチします。Perl の 's' フラグに対応するのは '\_' 修
1175 飾子です。'.' や文字クラスの前に '\_' を付けると、改行にもマッチするようになり
1176 ます。
1178 次のものは Perl だけの機能です:
1179 - 正規表現中で任意のコードを実行する: (?{perl code})
1180 - 条件式: (?(condition)true-expr|false-expr)
1182 次のものは Vim だけの機能です:
1183 - パターンのマジックを変更する:  \v \V \m \M
1184    (バックスラッシュだらけになるのを防げます)
1185 - 任意にマッチするアトム列:  \%[atoms]
1186 - \&   ("\&" と "\|" は、"and" と "or" の関係です。複数のブランチを同じ場所で
1187   マッチさせることができます)
1188 - 行や列を指定してマッチングする:  \%5l \%5c \%5v
1189 - 正規表現にマッチしたものとして返される範囲を設定する:  \zs \ze
1191 ==============================================================================
1192 10. マッチしたテキストを強調する                              *match-highlight*
1194                                                         *:mat* *:match*
1195 :mat[ch] {group} /{pattern}/
1196                 カレントウィンドウ内で強調表示するパターンを定義します。強調に
1197                 は {group} が使われます。例: >
1198                         :highlight MyGroup ctermbg=green guibg=green
1199                         :match MyGroup /TODO/
1200 <               {pattern} の区切りには // 以外の文字を使うことができます。'"'
1201                 や '|' などの特別な文字を使うときは注意してください。
1203                 {group} は、コマンドを実行する前に定義しておく必要があります。
1205                 {group} の強調は、'hlsearch' や構文強調 ('syntax'参照) の強調
1206                 よりも優先されます。
1208                 Note: 'hlsearch' の強調はすべてのウィンドウに適用されますが、
1209                 ":match" はカレントウィンドウだけです。ウィンドウのバッファを
1210                 切り替えても、強調表示は維持されます。
1212                 'ignorecase' の設定は使われません。大文字と小文字は区別されま
1213                 す。大文字と小文字の違いを無視するには、|/\c| を使います。
1215                 'redrawtime' を設定すると、検索に費やす時間を制限できます。
1217                 改行にマッチしているときに、Vim がディスプレイの一部だけを再描
1218                 画すると、予期しない結果になることがありますが、それは、Vim が
1219                 再描画した行からマッチの検索を開始するからです。
1221                 |matcharg()| は |:match| コマンドで使用されたパターンと強調グ
1222                 ループを返します。|getmatches()| は |matchadd()| と |:match|
1223                 で定義されたマッチのパターンと強調グループのリストを返します。
1225                 |:match| コマンドではマッチを三つまで定義できます (|:match|、
1226                 |:2match|、|:3match|)。|matchadd()| にはこのような制限はありま
1227                 せん。加えて、優先順位を設定することもできます。
1229                 :match コマンドによって設定された強調グループとパターンを得る
1230                 には |matcharg()| を使います。
1232                 次の例は、表示桁で 72 列目以降の文字をすべて強調表示します: >
1233                         :highlight rightMargin term=bold ctermfg=blue guifg=blue
1234                         :match rightMargin /.\%>72v/
1235 <               表示桁で 7 列目の文字をすべて強調表示するには次のようにします: >
1236                         :highlight col8 ctermbg=grey guibg=grey
1237                         :match col8 /\%<8v.\%>7v/
1238 <               Note: TAB のような文字は、1 桁を超えて表示されます。
1240 :mat[ch]
1241 :mat[ch] none
1242                 以前に定義したマッチパターンを消去します。
1245 :2mat[ch] {group} /{pattern}/                                   *:2match*
1246 :2mat[ch]
1247 :2mat[ch] none
1248 :3mat[ch] {group} /{pattern}/                                   *:3match*
1249 :3mat[ch]
1250 :3mat[ch] none
1251                 上述の |:match| と同じですが、別々のマッチを設定します。そのた
1252                 め、同時に三つのマッチを表示できます。同じ場所でマッチした場合
1253                 は、数値の低いものが優先されます。
1254                 ":3match" コマンドは |matchparen| プラグインで使用されていま
1255                 す。あなたが手動でマッチを設定するときは ":match" を使ってくだ
1256                 さい。他のプラグインでは ":2match" を使ってください。
1258 訳注: 訳語
1259 訳注: concat 連接
1260 訳注: multi >量指定子< 量指定詞 数量子 数量詞
1261 訳注: ordinary atom 普通のアトム
1262 訳注: a sequence of optionally matched atoms 任意にマッチするアトム列
1263 訳注: last search pattern 最終検索パターン
1264  vim:tw=78:ts=8:ft=help:norl: