*pattern.txt* For Vim バージョン 8.1. Last change: 2019 May 05 VIMリファレンスマニュアル by Bram Moolenaar
パターンと檢索コマンド
最も基本的な說明はユーザーマニュアルの |03.9| にあります。27章 |usr_27.txt| にも說明があります。
1. 檢索コマンド | |search-commands| |
2. パターンの定義 | |search-pattern| |
3. Magic | |/magic| |
4. パターンの槪要 | |pattern-overview| |
5. 量指定子 | |pattern-multi-items| |
6. 普通のアトム | |pattern-atoms| |
7. 大文字と小文字を無視する | |/ignorecase| |
8. 合成文字 | |patterns-composing| |
9. Perl のパターンとの比較 | |perl-patterns| |
10. マッチしたテキストを强調する | |match-highlight| |
[count] 番目にマッチする {pattern} を前方檢索します。|exclusive| (排他的)
[count] 番目にマッチする {pattern} を前方檢索し、|{offset}| 行だけ上/下に移動します。|linewise| (行指向)
[count] 番目にマッチする最終檢索パターン |last-pattern| を、最後に使はれた |{offset}| を使つて、前方檢索します。
[count] 番目にマッチする最終檢索パターン |last-pattern| を、新しい |{offset}| を使つて前方檢索します。{offset} を指定しなかつた場合、|{offset}| は使はれません。
[count] 番目にマッチする {pattern} を後方檢索します。|exclusive| (排他的)
[count] 番目にマッチする {pattern} を後方檢索して |{offset}| 行だけ上/下に移動します。|linewise| (行指向)
[count] 番目にマッチする最終檢索パターン |last-pattern| を、最後に使はれた |{offset}| を使つて、後方檢索します。
[count] 番目にマッチする最終檢索パターン |last-pattern| を、新しい |{offset}| を使つて後方檢索します。{offset} を指定しなかつた場合、|{offset}| は使はれません。
最後の "/" か "?" を [count] 回繰り返します。カーソルが移動しないときは、檢索は [count] + 1 で繰り返されます。|last-pattern|
最後の "/" か "?" を逆方向に [count] 回繰り返します。|last-pattern|
[count] 番目にマッチする單語を前方檢索します。檢索される單語は、カーソルに最も近い單語です。次の順番で選擇されます:
’smartcase’ ではなく ’ignorecase’ の設定が使はれます。
"*" と同じですが、後方檢索します。ポンド記號 (文字コード 163) でも動作します。"#" キーがバックスペースとして動作する場合は、Vim を起動する前に "stty erase <BS>" としてみてください (<BS> は CTRL-H もしくは本當のバックスペースです)。
"*" と似てゐますが "\<" と "\>" を單語の周りに加へません。つまり單語の一部にマッチするものを檢索することもできます。
"#" と似てゐますが "\<" と "\>" を單語の周りに加へません。つまり單語の一部にマッチするものを檢索することもできます。
ローカル宣言を檢索します。カーソルがローカル變數の上にある場合、その變數の宣言にジャンプします。はじめに、Vim は現在の函數の開始行を檢索します ("[[" コマンドと同じ)。見つからなかつた場合は、ファイルの 1 行目に移動します。見つかつた場合は、その場所から空行を後方檢索します。そして、"*" コマンドで檢索するのと同じやうに、キーワードを檢索します。このとき、コメントと判斷した行は無視します (’comments’ オプション參照)。
Note:
Vim は文法を實際にチェックしてゐるわけではなく、キーワードにマッチするものを檢索してゐるだけですので、これがうまく動作するとは限りません。インクルードされてゐるファイル內も檢索したい場合は、|include-search| で列擧されてゐるコマンドを使つてください。このコマンドを實行した後、コマンド |n| で次のマッチを前方檢索できます。
グローバル宣言を檢索します。ファイル內で定義されてゐるグローバル變數の上にカーソルがある場合、その宣言にジャンプします。"gd" と同じですが、このコマンドは常に 1 行目からキーワードを檢索します。
"gd" と同じですが、現在のカーソル位置より前の {} ブロック內を無視します。
"gD" と同じですが、現在のカーソル位置より前の {} ブロック內を無視します。
現在の (檢索) コマンドを中止します。MS-DOS では CTRL-Break を使つてください |dos-CTRL-Break|。ノーマルモードでは、入力濟みの、まだ實行されてゐないコマンドをすべて中止します。
’hlsearch’ オプションによる强調表示をやめます。檢索コマンドを使ふか、’hlsearch’ をオンに設定すると、再び强調表示されます。このコマンドは自動コマンド中は機能しません。自動コマンドを實行する時に强調表示の狀態を保存し、實行後に元に戾すからです。|autocmd-searchpat| ユーザー函數を呼び出したときも同樣。
’incsearch’ オプションがオンの場合、檢索パターンを入力してゐる途中に、その時點でマッチしてゐるものが强調表示されます。實際に、その場所にカーソルを移動させるには <CR>
を打つて檢索を終了する必要があります。檢索を中止するには <Esc>
キーを使つてください。
’hlsearch’ オプションがオンの場合、最後に使つた檢索パターンは强調表示されます。|:nohlsearch| コマンドを使ふと、一時的に强調表示をやめさせることができます。
’shortmess’ が "S" フラグを含まない場合、Vim はカーソルが位置するインデックスを自動的に表示します。これはこのやうに見えます:
[1/5] Cursor is on first of 5 matches. [1/>99] Cursor is on first of more than 99 matches. [>99/>99] Cursor is after 99 match of more than 99 matches. [?/??] Unknown how many matches exists, generating the statistics was aborted because of search timeout.
Note:
總數はオフセットを考慮してゐないことに注意してください。
マッチが見つからなかつた場合はエラーが表示されます:
*E486* Pattern not found
Note:
|:global| コマンドではこの動作はノーマルメッセージと同じです (Vi 互換のため)。|:s| コマンドでは "e" フラグを指定することでエラーメッセージを抑制できます |:s_flags|。
上記の檢索コマンドは指定されたパターンを檢索します。"/" と "?" ではさらにオフセットを指定できます。オフセットには、行オフセットと文字オフセットの 2 種類あります。
オフセットを指定して、マッチした場所から相對的にカーソルを移動できます:
[num] | [num] 行下、1 桁目に移動 |
+[num] | [num] 行下、1 桁目に移動 |
-[num] | [num] 行上、1 桁目に移動 |
e[+num] | [num] 文字右に、マッチ部分の終はりの場所から移動 |
e[-num] | [num] 文字左に、マッチ部分の終はりの場所から移動 |
s[+num] | [num] 文字右に、マッチ部分の初めの場所 (start) から移動 |
s[-num] | [num] 文字左に、マッチ部分の初めの場所 (start) から移動 |
b[+num] | [num] 上記 s[+num] と同じ (begin の b) |
b[-num] | [num] 上記 s[-num] と同じ (begin の b) |
;{pattern} | さらに檢索する。|//;| を參照。 |
’-’ か ’+’ を指定して [num] を省略した場合は 1 が使はれます。’e’ を使つてオフセットを指定した場合、檢索は包括的になります (カーソルが移動するであらう位置の文字まで含めて操作の對象になります)。
例:
パターン | カーソルの位置 |
/test/+1 | "test" の 1 行下の 1 桁目 |
/test/e | "test" の最後 |
/test/s+2 | "test" の ’s’ |
/test/b-3 | "test" の 3 文字前 |
これらのコマンドがオペレータに對して使はれた場合、現在のカーソル位置から、檢索後のカーソル位置までが、操作の對象となります。ただし、行オフセットが指定された場合は、2 つのカーソル位置の閒の行全體が操作の對象となります。
パターンを檢索して置換する例:
/foo<CR> | "foo" を檢索 |
c//e<CR> | マッチした文字列を變更 |
bar<Esc> | 置換する文字を入力 |
//<CR> | 次のマッチへ移動 |
c//e<CR> | マッチした文字列を變更 |
beep<Esc> | 今度は別の文字で置換 |
... |
非常に特殊なオフセットですが、’;’ に續けて檢索コマンドを指定できます。例:
/test 1/;/test /test.*/+1;?ing?
1 つ目の例は、はじめに次の "test 1" を檢索し、それから "test" を檢索します。
これは、2 つの檢索コマンドを分けて實行するのと似てゐますが、次の點が違ひます:
最後に使はれた檢索パターン (最終檢索パターン) とオフセットは記憶され、同じ檢索を繰り返すのに使ふことができます。檢索方向を變へたり、カウントを指定したりすることもできます。
Note:
記憶されるパターンは 2 つあります。1 つは「通常の」檢索コマンドのパターンです。もう 1 つは置換コマンド ":s
" のパターンです。
空のパターンを指定すると直前に使用されたパターンが使はれます。ただし、檢索パターンがまだ使用されてなかつた場合は、可能であれば、直前の置換コマンドのパターンが使はれます。
’magic’ オプションは最終檢索パターンに影響しません。’magic’ を變更しても、最終檢索パターンの解釋は變はりません。
’ignorecase’ オプションは違ひます。’ignorecase’ が變更された場合、最終檢索パターンは、違ふテキストにマッチする可能性があります。
’hlsearch’ オプションがオンの場合、最終檢索パターンにマッチするテキストが强調表示されます。
最終檢索パターンを消去するには次のやうにします:
:let @/ = ""
パターンに空文字列をセットしてゐるのではありません。それだと全ての場所にマッチしてしまひます。パターンは本當に消去され、Vim 起動直後のやうに、何もない狀態になります。
檢索では通常、カーソル下のマッチはスキップされます。そのとき、すぐ隣の文字から檢索を開始するのか、スキップしたマッチの後ろから檢索を開始するのかは、’cpoptions’ の ’c’ フラグに依存します。|cpo-c| を參照。
’c’ フラグがある場合: | "/..." は 1 から 3 文字ずつ進みます。 |
’c’ フラグがない場合: | "/..." は 1 文字ずつ進みます。 |
檢索は行頭から開始され、カーソル位置を過ぎたマッチを見附けるまでスキップされます。そのため、’c’ フラグを含んでゐる場合の動作は豫想外かもしれません。 {譯注:
aaaaaa
カーソルが 2 桁目にある場合、/aaa は 4 桁目からの ‘aaa’ にマッチする。これは、行頭から ‘aaa aaa’ といふマッチの區切りになり、カーソルを含んだ最初の ‘aaa’ がスキップされるため。}
後方檢索するときも、檢索は行頭から始まり、上述のやうに ’cpoptions’ の ’c’ フラグが使はれます。そして、カーソル位置より前でマッチする最後のマッチが使はれます。
Vi では、":tag
" コマンドでタグを檢索すると、最終檢索パターンは上書きされます。Vim では、’cpoptions’ に ’t’ フラグがある場合のみ、最終檢索パターンが上書きされます。どちらにしても、檢索パターンは常に檢索履歷に保存されます。
’wrapscan’ オプションがオン (初期設定) の場合、檢索がバッファの端に到達したときに、もう一方の端に移動して檢索が繼續されます。オフの場合は、後方檢索ならバッファの先頭、前方檢索ならバッファの末尾でストップします。
パターンが見つからなかつた場合、’wrapscan’ がオンのときは、"pattern not found" といふメッセージが表示され、カーソルは動きません。オフのときは、後方檢索なら "search hit TOP without match"、前方檢索なら "search hit BOTTOM without match"、といふメッセージが表示されます。
’wrapscan’ がオンのときに檢索がバッファの端から端へ繼續した場合、後方檢索なら "search hit TOP, continuing at BOTTOM"、前方檢索なら "search hit BOTTOM, continuing at TOP" といふメッセージが表示されます。このメッセージを表示しないやうにするには、’shortmess’ オプションに ’s’ フラグを設定します。メッセージは ’highlight’ オプションの ’w’ で强調表示されます (初期設定: standout)。
"/" コマンドで檢索するとき、\%>l を含めることで檢索の範圍を指定できます。例へば、199 行目と 300 行目の閒にある "limit" といふ單語を檢索するには次のやうにします:
/\%>199l\%<300llimit
|/\%>l| も參照。
他にも、":substitute
" コマンドに ’c’ フラグをつける方法で、擬似的な範圍內檢索ができます。例:
:.,300s/Pattern//gc
この例では、カーソル位置から 300 行目までの閒で "Pattern" が檢索されます。マッチした場所で、動作を指示するためのキーを入力必要があります。檢索を停止するには ’q’ を、次のマッチを檢索するには ’n’ を入力します。
"*", "#", "g*", "g#" コマンドはカーソルに近い單語を次の順番で檢索します。最初に見つかつたものが使はれます:
キーワードは、’iskeyword’ で定義されてゐる文字だけを含む文字列です。單語 (|WORD|) は、空白文字 (<Tab> や <Space>) を含まない文字列です。
Note:
10 本の指を使つてタイプしてゐるなら、このコマンドを覺えるのは簡單です:
- "#" は左手の中指で押します (左上に向かつて檢索します)。
- "*" は右手の中指で押します (右下に向かつて檢索します)。
{譯注: これは英語キーボードでの話}
非常に稀なケースで、再歸的に正規表現が使はれます。これは、パターンの實行に時閒がかかつてゐる時やチャネルのメッセージをチェックしてゐる時に、コールバックが呼び出されることを生じます。またパターンを使つたり自動コマンドが引き金にもなります。多くの場合、たぶんうまくいくはずですが、パターンがその中で再度使はれた時は失敗するでせう。たいていこれは何か惡いパターンが使はれてゐることを意味します。
初心者の方はユーザーマニュアルの 27 章 |usr_27.txt| を讀んでください。
1. パターンは、"\|" で分けられた 1 つ以上のブランチからなります。ブランチがどれか 1 つでもマッチすればマッチします。例へば、"foo\|beep" は "foo" と "beep" にマッチします。複數のブランチがマッチした場合は、最初にマッチしたものが使はれます。
pattern ::= branch or branch \| branch or branch \| branch \| branch etc.
2. ブランチは、"\&" で分けられた1つ以上の連接からなります。全ての連接が同じ場所でマッチした場合に限り、最後の連接がマッチします。例:
ranch ::= concat or concat \& concat or concat \& concat \& concat etc.
3. 連接は、連續した 1 つ以上のピースからなります。ピースがすべて、順番どほりマッチした場合にマッチします。たとへば、"f[0-9]b" は最初に "f" にマッチし、次に 1 桁の數字、そして "b" にマッチします。
concat ::= piece or piece piece or piece piece piece etc.
4. ピースはアトムです。アトムが何囘マッチするかを指示する、量指定子を後ろに置くことができます。たとへば "a*" はいくつの "a" でもマッチします。"", "a", "aa" など。|/multi| を參照。
piece ::= atom or atom multi
5. アトムはパターンアイテムを構成する要素です。ほとんどのアトムは 1 文字にマッチします。多くの場合、アトムは普通の文字か文字クラスです。カッコを使つてパターンからアトムを作れます。"\z(\)" は構文强調專用です。
atom ::= ordinary-atom |/ordinary-atom| or \( pattern \) |/\(| or \%( pattern \) |/\%(| or \z( pattern \) |/\z(|
{verbatim 內で ref を使へないので: |/ordinary-atom|, |/\(|, |/\%(|, |/\z(| }
Vim は 2 つの正規表現エンジンを持つてゐます:
Vim は自動的に適切なエンジンを選擇します。何か問題が發生したか、あるいは明示的にエンジンを選擇したいか、あるいはその他の理由で、エンジンを指定したい場合はパターンの先頭で次のやうに指定します:
\%#=0 | 强制的に自動選擇にする。’regexpengine’ が 0 以外のときだけ意味がある。 |
\%#=1 | 强制的に古いエンジンを使ふ。 |
\%#=2 | 强制的に NFA エンジンを使ふ。 |
’regexpengine’ オプションでもデフォルトのエンジンを選擇できます。
NFA エンジンが選擇され、未實裝の機能が使用され、パターンがマッチしなかつた場合に發生します。Vim のデバッグ用です。
パターンの中でリテラルとして扱はれる文字は、テキストの同じ文字とマッチします。しかし、バックスラッシュが前置されると、特別な意味を持つやうになります。
バックスラッシュを前置しなくても特別な意味を持つ文字があります。そのやうな文字をリテラル文字としてマッチさせるには、バックスラッシュを前置する必要があります。
ある文字がリテラルとして處理されるかどうかは、オプション ’magic’ と、以下で說明するアイテムに依存します。 "\m" を使ふと、それ以降のパターンは ’magic’ がオンの狀態で處理されます。オプション ’magic’ の設定よりも優先されます。"\M" を使ふと、それ以降のパターンは ’nomagic’ の狀態で處理されます。 "\v" を使ふと、それ以降の ’0’-’9’, ’a’-’z’, ’A’-’Z’, ’_’ 以外のすべての ASCII 文字は特別な意味を持ちます: "very magic"
"\V" を使ふと、それ以降はバックスラッシュと終端文字 (通常は / や ?) だけが特別な意味を持ちます: "very nomagic"
例:
after: | \v | \m | \M | \V | マッチするもの |
’magic’ | ’nomagic’ | ||||
$ | $ | $ | \$ | 行末 | |
. | . | \. | \. | 何か 1 文字 | |
* | * | \* | \* | 直前のアトムの繰り返し | |
~ | ~ | \~ | \~ | 直近の置換文字列 | |
() | \(\) | \(\) | \(\) | グループ化してアトムにする | |
| | \| | \| | \| | 選擇の區切り | |
\a | \a | \a | \a | 英字 | |
\\ | \\ | \\ | \\ | リテラルのバックスラッシュ | |
\. | \. | . | . | リテラルのドット | |
\{ | { | { | { | リテラルの ’{’ | |
a | a | a | a | リテラルの ’a’ |
{\m、\M、\v、\V、は Vim だけの機能です}
オプション ’magic’ は初期設定のままにしておいてください。環境の違ひによるトラブルを囘避できます。パターンが ’magic’ の設定に影響されないやうにするには、パターンの先頭に "\m" か "\M" を置きます。
詳しい說明や使用例は、リンク先を參照してください。
’magic’ | ’nomagic’ | アトムがいくつマッチするか | ||
|/star| | * | \* | 0 以上 | 最長一致 |
|/\+| | \+ | \+ | 1 以上 | 最長一致 |
|/\=| | \= | \= | 0 か 1 | 最長一致 |
|/\?| | \? | \? | 0 か 1 | 最長一致 |
|/\{| | \{n,m} | \{n,m} | n 以上 m 以下 | 最長一致 |
\{n} | \{n} | n | 正確に指定した數だけ | |
\{n,} | \{n,} | n 以上 | 最長一致 | |
\{,m} | \{,m} | 0 以上 m 以下 | 最長一致 | |
\{} | \{} | 0 以上 | 最長一致 (* と同じ) | |
|/\{-| | \{-n,m} | \{-n,m} | n 以上 m 以下 | 最短一致 |
\{-n} | \{-n} | n | 正確に指定した數だけ | |
\{-n,} | \{-n,} | n 以上 | 最短一致 | |
\{-,m} | \{-,m} | 0 以上 m 以下 | 最短一致 | |
\{-} | \{-} | 0 以上 | 最短一致 | |
|/\@>| | \@> | \@> | 1 | 强慾な量指定子 |
|/\@=| | \@= | \@= | なし | 幅ゼロの肯定先讀み |/zero-width| |
|/\@!| | \@! | \@! | なし | 幅ゼロの否定先讀み |/zero-width| |
|/\@<=| | \@<= | \@<= | なし | 幅ゼロの肯定後讀み |/zero-width| |
|/\@<!| | \@<! | \@<! | なし | 幅ゼロの否定後讀み |/zero-width| |
詳しい說明や使用例は、リンク先を參照してください。
magic | nomagic | マッチするもの | |
|/^| | ^ | ^ | 行頭 (パターンの先頭にある場合だけ) |/zero-width| |
|/\^| | \^ | \^ | リテラル文字 ’^’ |
|/\_^| | \_^ | \_^ | 行頭 (どこでも使へる) |/zero-width| |
|/$| | $ | $ | 行末 (パターンの末尾にある場合だけ) |/zero-width| |
|/\$| | \$ | \$ | リテラル文字 ’$’ |
|/\_$| | \_$ | \_$ | 行末 (どこでも使へる) |/zero-width| |
|/.| | . | \. | 何か 1 文字 (改行以外) |
|/\_.| | \_. | \_. | 何か 1 文字 (改行含む) |
|/\<| | \< | \< | 單語の先頭 |/zero-width| |
|/\>| | \> | \> | 單語の末尾 |/zero-width| |
|/\zs| | \zs | \zs | なし。マッチの開始地點を設定します |
|/\ze| | \ze | \ze | なし。マッチの終了地點を設定します |
|/\%^| | \%^ | \%^ | ファイルの先頭 |/zero-width| |
|/\%$| | \%$ | \%$ | ファイルの末尾 |/zero-width| |
|/\%V| | \%V | \%V | 選擇範圍內 |/zero-width| |
|/\%#| | \%# | \%# | カーソル位置 |/zero-width| |
|/\%'m| | \%’m | \%’m | マーク m の位置 |/zero-width| |
|/\%l| | \%23l | \%23l | 23 行目 |/zero-width| |
|/\%c| | \%23c | \%23c | 23 列目 |/zero-width| |
|/\%v| | \%23v | \%23v | 23 列目 (表示單位) |/zero-width| |
magic | nomagic | マッチするもの | |
|/\i| | \i | \i | 識別子文字 (オプション ’isident’ を參照) |
|/\I| | \I | \I | "\i" と同じですが、數字は除外します |
|/\k| | \k | \k | キーワード文字 (オプション ’iskeyword’ を參照) |
|/\K| | \K | \K | "\k" と同じですが、數字は除外します |
|/\f| | \f | \f | ファイル名の文字 (オプション ’isfname’ を參照) |
|/\F| | \F | \F | "\f" と同じですが、數字は除外します |
|/\p| | \p | \p | 印字可能文字 (オプション ’isprint’ を參照) |
|/\P| | \P | \P | "\p" と同じですが、數字は除外します |
|/\s| | \s | \s | 空白文字: <Space> と <Tab> |
|/\S| | \S | \S | 空白文字以外。\s の反對です |
|/\d| | \d | \d | 數字 [0-9] |
|/\D| | \D | \D | 數字以外 [^0-9] |
|/\x| | \x | \x | 16 進數字 [0-9A-Fa-f] |
|/\X| | \X | \X | 16 進數字以外 [^0-9A-Fa-f] |
|/\o| | \o | \o | 8 進數字 [0-7] |
|/\O| | \O | \O | 8 進數字以外 [^0-7] |
|/\w| | \w | \w | 單語を構成する文字 [0-9A-Za-z_] |
|/\W| | \W | \W | 單語を構成する文字以外 [^0-9A-Za-z_] |
|/\h| | \h | \h | 單語の先頭の文字 [A-Za-z_] |
|/\H| | \H | \H | 單語の先頭の文字以外 [^A-Za-z_] |
|/\a| | \a | \a | 英字 [A-Za-z] |
|/\A| | \A | \A | 英字以外 [^A-Za-z] |
|/\l| | \l | \l | 小文字英字 [a-z] |
|/\L| | \L | \L | 小文字英字以外 [^a-z] |
|/\u| | \u | \u | 大文字英字 [A-Z] |
|/\U| | \U | \U | 大文字英字以外 [^A-Z] |
|/\_| | \_x | \_x | x は上記の文字クラスのどれかです。文字クラスと改行がマッチします。 |
(文字クラスここまで)
magic | nomagic | マッチするもの | |
|/\e| | \e | \e | <Esc> |
|/\t| | \t | \t | <Tab> |
|/\r| | \r | \r | <CR> |
|/\b| | \b | \b | <BS> |
|/\n| | \n | \n | 改行 |
|/~| | ~ | \~ | 最後に置換された文字列 |
|/\1| | \1 | \1 | 最初の \(\) と同じ文字列 |
|/\2| | \2 | \2 | "\1" と同じですが、2 番目の \(\) を使ひます |
... | |||
|/\9| | \9 | \9 | "\1" と同じですが、9 番目の \(\) を使ひます |
|/\z1| | \z1 | \z1 | 構文强調專用。|:syn-ext-match| を參照 |
... | |||
|/\z1| | \z9 | \z9 | 構文强調專用。|:syn-ext-match| を參照 |
x | x | 特別な意味のない文字は、その文字自身とマッチします | |
|/[]| | [] | \[] | [] で圍んだ文字のうちどれか |
|/\%[]| | \%[] | \%[] | 任意にマッチするアトム列 |
|/\c| | \c | \c | 大文字小文字を無視します。’ignorecase’ は使用されない |
|/\C| | \C | \C | 大文字小文字を區別します。’ignorecase’ は使用されない |
|/\Z| | \Z | \Z | Unicode の合成文字かどうかを無視します。ヘブライ語やアラビア語で母音を檢索するときに便利です。 |
magic | nomagic | マッチするもの | |
|/\m| | \m | \m | 以降のパターン文字を ’magic’ がオンの狀態で處理します |
|/\M| | \M | \M | 以降のパターン文字を ’magic’ がオフの狀態で處理します |
|/\v| | \v | \v | 以降のパターン文字を "very magic" で處理します |
|/\V| | \V | \V | 以降のパターン文字を "very nomagic" で處理します |
|/\%#=| | \%#=1 | \%#=1 | 正規表現エンジンを選擇する |/zero-width| |
|/\%d| | \%d | \%d | 10 進數指定の特定の文字 (例 \%d123) |
|/\%x| | \%x | \%x | 16 進數指定の特定の文字 (例 \%x2a) |
|/\%o| | \%o | \%o | 8 進數指定の特定の文字 (例 \%o040) |
|/\%u| | \%u | \%u | 特定のマルチバイト文字 (例 \%u20ac) |
|/\%U| | \%U | \%U | 特定の廣汎圍のマルチバイト文字 (例 \%U12345678) |
|/\%C| | \%C | \%C | すべての合成文字 |
例 | マッチするもの |
\<\I\i* \<\h\w* \<[a-zA-Z_][a-zA-Z0-9_]* | 識別子 (例へば C 言語の識別子) |
\(\.$\|\. \) | <EOL> かスペースの直前のピリオド |
[.!?][])"’]*\($\|[ ]\) | 文末。")" コマンドが認識する文末と同じ定義です。 |
cat\Z | "cat" と "càt" ("a" + 0x0300) にマッチする。見た目は似てゐますが、"càt" (0x00e0) にはマッチしません。 |
アトムがどのやうに、何囘マッチするかを指示するものを、量指定子 (multi) と呼びます。槪要は |/multi| を參照してください。
(’magic’ がオフのときは \* )
アトムの 0 回以上の繰り返し。最長一致。
例 | ’nomagic’ | マッチするもの |
a* | a\* | ""、"a"、"aa"、"aaa"、など。 |
.* | \.\* | 改行以外の全て (空文字列も) |
\_.* | \_.\* | バッファの末尾までの全て |
\_.*END | \_.\*END | 一番最後の "END" までの全て |
例外: パターンの最初と "^" の直後の "*" は、リテラルの "*" にマッチします。
"\_." の繰り返しには注意してください。たくさんのテキストがマッチして、そして、時閒が掛かります。たとへば、"\_.*END" は、カーソルの位置から 1 番最後の "END" までのすべてのテキストがマッチします。"*" は最長一致なので、まづファイルの末尾までスキップして、それから 1 文字ずつ後退しながら "END" を探します。
アトムの 1 回以上の繰り返し。最長一致。
例 | マッチするもの |
^.\+$ | 空行以外の行 |
\s\+ | 1 文字以上の空白 |
0 回または 1 回のアトム。最長一致。
例 | マッチするもの |
foo\= | "fo" と "foo" |
\= と同じ。"?" コマンドによる後方檢索では使へません。
アトムの n 以上 m 以下の繰り返し。最長一致
アトムの n 回の繰り返し
アトムの n 回以上の繰り返し。最長一致
アトムの 0 以上 m 以下の繰り返し。最長一致
アトムの 0 回以上の繰り返し。最長一致 (*と同じ)
アトムの n 以上 m 以下の繰り返し。最短一致
アトムの n 回の繰り返し
アトムの n 回以上の繰り返し。最短一致
アトムの 0 以上 m 以下の繰り返し。最短一致
アトムの 0 回以上の繰り返し。最短一致
n と m には 10 進數正數、またはゼロを指定できます。 "{" の直後に "-" がある場合は、最短一致のアルゴリズムが使はれます (下記の例を參照)。特に、"\{-}" は "*" と同じですが、最短一致のアルゴリズムが使はれます。しかし、早い位置でマッチするものが、短いマッチよりも優先されます。たとへば、"a\{-}b" は "xaaab" の "aaab" にマッチします。
例 | マッチするもの |
ab\{2,3}c | "abbc" または "abbbc" |
a\{5} | "aaaaa" |
ab\{2,}c | "abbc", "abbbc", "abbbbc", など |
ab\{,3}c | "ac", "abc", "abbc" or "abbbc" |
a[bc]\{3}d | "abbbd", "abbcd", "acbcd", "acccd" など |
a\(bc\)\{1,2}d | "abcd" または "abcbcd" |
a[bc]\{-}[cd] | "abcd" の "abc" |
a[bc]*[cd] | "abcd" の "abcd" |
} にバックスラッシュを前置するかどうかは任意です: \{n,m\}
幅ゼロの肯定先讀み。先行するアトムに幅ゼロでマッチします。
Perl の "(?=pattern)" と似てゐます。
例 | マッチするもの |
foo\(bar\)\@= | "foobar" の "foo" |
foo\(bar\)\@=foo | 何もマッチしない |
"\@=" (や、"^"、"$"、"\<"、"\>"、など) を使つた場合、その文字はマッチに含まれません。これらのアイテムは、マッチすることができるかどうかのチェックだけに使はれます。續くアイテムが同じ場所でマッチすることに注意してください。上記の最後の例は "foobarfoo" にはマッチしません。"bar" がマッチしたのと同じ場所で "foo" とマッチしようとするからです。
Note:
"\&" は "\@=" と同じやうな働きをします。"foo\&.." と "\(foo\)\@=.." は同じです。カッコを書かなくていいので "\&" の方が簡單です。
幅ゼロの否定先讀み。先行するアトムが現在の位置でマッチしない場合に、幅ゼロでマッチします。|/zero-width|
Perl の "(?!pattern)" と似てゐます。
例 | マッチするもの |
foo\(bar\)\@! | 後ろに "bar" のない "foo" |
a.\{-}p\@! | 後ろに "p" のない "a", "ap", "app", "appp" など |
if \(\(then\)\@!.\)*$ | 後ろに "then" のない "if " |
"\@!" を使ふには注意が必要です。パターンにマッチしない場所、といふのはそこらじゅうにあるからです。"a.*p\@!" は "a" から行末までマッチします。なぜなら、".*" が全ての文字にマッチし、"p" は行末にマッチしないからです。"a.\{-}p\@!" は後ろに "p" のない文字列、"a", "ap", "app" などにマッチします。なぜなら、"." が "p" にもマッチし、"p\@!" がその後ろにマッチする (つまり "p" がマッチしない) からです。
直前がマッチしないことを調べるために "\@!" を使ふことはできません。"\(foo\)\@!bar" は "foobar" の "bar" にマッチします。なぜなら、"foo" がマッチしなかつた場所で、"bar" がマッチするからです。"foobar" がマッチしないやうに、"\(foo\)\@!...bar" とすることもできますが、これは行頭の "bar" にはマッチしません。"\(foo\)\@<!bar" を使つてください。
實用的な例: "bar" を含んでゐない行から "foo" を探す:
/^\%(.*bar\)\@@!.*\zsfoo
このパターンはまづ、行の中で "bar" がマッチしないことを確認します。もしどこかで ".*bar" がマッチすると \@! によつてこのパターンは否決されます。それがマッチせず、そしてどこかで "foo" が見つかると、"\zs" によつて "foo" の直前でマッチが開始したことにされます。
幅ゼロの肯定後讀み。先行するアトムが、この後に續くパターンの直前にマッチする場合に、幅ゼロでマッチします。|/zero-width|
Perl の "(?<=pattern)" と似てゐますが、Vim では可變長パターンも使へます。
例 | マッチするもの |
\(an\_s\+\)\@<=file | "an" と空白文字 (改行含む) の後の "file" |
處理速度を氣にするなら、この量指定子は避けたはうが無難です。代はりに "\zs" を使つてください |/\zs|。次のものは上記の例と同じものにマッチします:
an\_s\+\zsfile
あるいは少なくとも探索範圍を制限した方がいいでせう。下記參照。
"\@<=" と "\@<!" は直前の文字がマッチしてゐるかどうかをチェックします。理論上は、マッチの現在位置よりも前ならどこでもマッチできます。しかし、處理時閒を制限するために、マッチの現在行と、(もしあれば) 1 つ前の行だけが檢索されます。ほとんどの場合はこれで十分ですし、遲くなり過ぎることもありません。
古い正規表現エンジンでは "\@<=" や "\@<!" の後にくるパターンは最初にチェックされます。そのため、先行するアトムの內側にある \(\) に對する "\1" のやうな參照は機能しません。順番を逆にした場合は機能します:
惡い例 | マッチするもの |
\%#=1\1\@<=,\([a-z]\+\) | "abc,abc" の中の ",abc" |
新しい正規表現エンジンでは動作が異なるので、この動作の違ひに依存しないやうにするのが無難です。可能なら \@<= の使用を避けてください:
例 | マッチするもの |
\([a-z]\+\)\zs,\1 | "abc,abc" の中の ",abc" |
"\@<=" と同じですが 123 バイトまでしか探索しません。失敗すると分かつてゐて、その探索のせゐで遲くなる狀況を囘避できます。例へば、"span" の前に "<" があるかどうかをチェックする場合:
/<\@1<=span
このパターンは "span" の前の 1 バイトだけを見て "<" を探します。この例ではなんにしても 1 バイト前だけが唯一マッチする場所です。
行をまたいだ場合、探索範圍はその行末からの相對位置になります。つまり、探索開始位置の行の文字はカウントされません (ものごとをシンプルに保つため)。
數値のゼロは制限なしと同じです。
幅ゼロの否定後讀み。先行するアトムが、この後に續くパターンの直前にマッチしない場合に、幅ゼロでマッチします。現在行と 1 つ前の行だけがチェックされます。|/zero-width|
Perl の "(?<!pattern)" と似てゐますが、Vimでは可變長パターンも使へます。對象のアトムは、續くアトムの直前までがマッチの範圍になるため、最後が ".*" で終はつてゐるアトムも機能します。
警告:
これは遲くなることがあります (マッチするかどうかを多くの場所でチェックする必要があるため)。可能であれば探索範圍に制限をかけてください。下記參照。
例 マッチするもの \(foo\)\@<!bar "foobar" 以外の "bar" \(\/\/.*\)\@<!in "//" の後ろ以外の "in"
"\@<!" と同じですが 123 バイトまでしか探索しません。失敗すると分かつてゐて、その探索のせゐで遲くなる狀況を囘避できます。
强慾な量指定子。
Perlの "(?>pattern)" と似てゐます。
例 | マッチするもの |
\(a*\)\@>a | 何もマッチしない ("a*" が全ての "a" を取るので、その後に "a" があることはありません) |
パターンがそのアトムだけであるかのやうにマッチします。そして、パターン全體がマッチしなくても、そのアトムのマッチを短くして再トライしたりはしません (バックトラックしません)。次の違ひに注意してください。"a*b" と "a*ab" は兩方とも "aaab" にマッチします。このとき、後者の "a*" は先頭の "aa" にマッチしてゐます。"\(a*\)\@>ab" は "aaab" にマッチしません。なぜなら、"a*" が "aaa" にマッチする (最長一致する) ため、"ab" がマッチできないからです。
普通のアトムは次のものです:
パターンの先頭にある場合、行頭にマッチします。"\|"、"\("、"\%(" の直後でも構ひません。他の場所にある場合は、リテラル文字の ’^’ にマッチします。|/zero-width|
例 | マッチするもの |
^beep( | (おそらく) C 言語の函數 "beep" の開始。 |
リテラル文字の ’^’ にマッチします。パターンのどの場所でも使へます。
行頭にマッチします。|/zero-width| パターンのどの場所でも使へます。
例 | マッチするもの |
\_s*\_^foo | 空白文字や空行の直後の、行頭の "foo" |
パターンの末尾、または "\|"、"\)"、"\n" (’magic’ on時) の前にある場合、行末 (<EOL>) にマッチします。他の場所にある場合は、リテラル文字の ’$’ にマッチします。|/zero-width|
リテラル文字の ’$’ にマッチします。パターンのどの場所でも使へます。
行末にマッチします。|/zero-width| パターンのどの場所でも使へます。
Note:
"a\_$b" はどこにもマッチしません。"b" は行末とはマッチしないからです。代はりに、"a\nb" を使つてください |/\n|。
例 マッチするもの foo\_$\_s* 行末の "foo" と、それに續く空白や空行
改行以外のすべての文字がマッチします。
改行も含め、すべての文字がマッチします。 注意: "\_.*" はバッファの末尾までのすべてのテキストがマッチします。
單語の先頭にマッチします。このアトムの次の文字は單語の 1 文字目です。どの文字が單語を構成するかは、オプション ’iskeyword’ で設定します。|/zero-width|
單語の末尾にマッチします。このアトムの前の文字は單語の最後の文字です。どの文字が單語を構成するかは、オプション ’iskeyword’ で設定します。|/zero-width|
どこにでもマッチして、マッチの開始地點を設定します。このアトムの次の文字は、マッチした文字列の 1 文字目です。|/zero-width|
例:
/^\s*\zsif
これは、行頭からスペースを無視して、"if" にマッチします。複數回の繰り返しで使つた場合は、最後にマッチしたものが使はれます。
例:
/\(.\{-}\zsFab\)\{3}
これは、3 番目に現れた "Fab" にマッチします。 後ろに量指定子を置くことはできない。
{|+syntax| が有效な場合のみ利用できます}
どこにでもマッチして、マッチの末尾を設定します。このアトムの前の文字は、マッチした文字列の最後の文字です。|/zero-width| 複數回の繰り返しで使つた場合は、最後にマッチしたものが使はれます。
例:
/end\ze\(if\|for\)
これは、"endif" または "endfor" の "end" にマッチします。 後ろに量指定子を置くことはできない。|E888|
{|+syntax| が有效な場合のみ利用できます}
ファイルの先頭にマッチします。文字列 (|expr-string|) とマッチングする場合は、文字列の先頭にマッチします。
例:
/\%^\_.\{-}\zsVIM
これは、ファイルの最初にある "VIM" にマッチします。
ファイルの末尾にマッチします。文字列 (|expr-string|) とマッチングする場合は、文字列の末尾にマッチします。
Note:
次のパターンでは、ファイルの最後の "VIM" を檢索できません:/VIM\_.\{-}\%$これは、カーソル位置から次の "VIM" を檢索します。"VIM" の後の "\_.\{-}\%$" が常にマッチするからです。ファイルの最後の "VIM" を檢索するには、次のやうにします:
/VIM\ze\(\(VIM\)\@!\_.\)*\%$"VIM" の後に "VIM" がないことを確實にするために |/\@!| を使つてゐます。ファイルの末尾から後方檢索する方が簡單です。
選擇範圍內にマッチします。ビジュアルモードでないときは、|gv| で再選擇できる範圍にマッチします。
これはゼロ幅マッチ |/zero-width| です。パターンを選擇範圍內でマッチさせたい場合は、パターンの最初と最後の直前にこれを指定してください。例:
/\%Vfoo.*ba\%Vr
これは "foo bar" のみがビジュアル選擇されてゐる場合でも機能します。以下は、
/\%Vfoo.*bar\%V
ビジュアル選擇が "r" より後も含む場合に "foo bar" にマッチします。カレントバッファでのみ機能します。
カーソルの位置にマッチします。ウィンドウに表示されてゐるバッファ內でマッチングする場合のみ機能します。
警告: パターンが使はれた後で、カーソルを移動した場合、マッチの結果は正確ではなくなつてしまひます。マッチの結果は自動的に更新されません。これは特に、構文强調と ’hlsearch’ に關係します。
カーソルが移動しても、表示は自動的に更新されません。表示が更新されるのは、行を變更したため行全體が更新されたときや、|CTRL-L| コマンドを使つてスクリーン全體を更新したときです。カーソル位置の單語を强調表示するには次のやうにします:
/\k*\%#\k*’hlsearch’ をオンにして、カーソルを移動し、テキストを變更してみて、表示が更新されるかどうか確認してください。
マーク m の位置にマッチします。
マーク m より前の位置にマッチします。
マーク m より後の位置にマッチします。
例へば、マーク ’s から ’e までを强調するには次のやうにします:
/.\%>'s.*\%<'e..
Note:
マーク ’e の位置をマッチに含めるには ’e の後に 2 つのドットが必要です。なぜなら、"\%<’e" はマーク ’e の前の文字にマッチし、そしてそれはゼロ幅マッチ|/zero-width| なので、その文字は結果に含まれないからです。
警告:
マークを檢索した後にマークを移動した場合、その結果は正しくなくなります。Vim は自動的にマッチの强調表示を更新したりしません。|/\%#| で檢索した後にカーソルを動かした場合と似てゐます。
指定した行にマッチします。
指定した行より上にマッチします。
指定した行より下にマッチします。
この 3 つを使つて、バッファの特定の行にマッチできます。"23" の所に行番號を指定してください。先頭の番號は 1 です。
警告: 行を插入したり削除したりしても、マッチの結果は自動的に更新されません。そのため、このアトムを使つた構文强調は、すぐに誤つた表示になつてしまひます。現在行を强調表示するには次のやうにします:
:exe '/\%' . line(".") . 'l.*'’hlsearch’ をオンにして、カーソルを移動し、テキストを變更してみて、表示が更新されるかどうか確認してください。
指定した列にマッチします。
指定した列より前にマッチします。
指定した列より後にマッチします。
この 3 つを使つて、バッファの特定の列にマッチできます。"23" の所に列番號を指定してください。先頭の番號は 1 です。實際には、何バイト目かを指定するので、マルチバイト文字を扱ふときには、"列番號" といふ表現は正確ではありません。
警告:
行を插入したり削除したりしても、マッチの結果は自動的に更新されません。そのため、このアトムを使つた構文强調は、すぐに誤つた表示になつてしまひます。カーソル位置の列を强調表示するには次のやうにします::exe '/\%' . col(".") . 'c'’hlsearch’ をオンにして、カーソルを移動し、テキストを變更してみて、表示が更新されるかどうか確認してください。44 バイト目を强調表示するには次のやうにします:
/\%>43c.\%<46cNote:
"." が 44 バイト目にマッチした場合、"%<46c" は 45 列目にマッチします。
指定した表示列にマッチします。
指定した表示列より前にマッチします。
指定した表示列より後にマッチします。
この 3 つを使つて、バッファの特定の表示列にマッチできます。文字列 (|expr-string|) とマッチングするときは、カレントウィンドウの、’tabstop’ などの設定が使はれます。
"23" の所に表示列番號を指定してください。先頭の番號は 1 です。
Note:
Tab 文字や全角文字などの、複數列で表示される文字の途中の列を指定した場合は、マッチしません。
警告:
行を插入したり削除したりしても、マッチの强調表示は自動的に更新されません。そのため、このアトムを使つた構文强調は、すぐに誤つた表示になつてしまひます。
表示列の 72 桁目以降のすべての文字を强調表示するには次のやうにします:
/\%>72v.*
’hlsearch’ をオンにして、カーソルを移動し、テキストを變更してみて、表示が更新されるかどうか確認してください。
17 列までのテキストにマッチさせるには次のやうにします:
/^.*\%17v
17 列目は含まれません。なぜならこれはゼロ幅マッチ (|/zero-width|) である爲です。列を含むには次を使用します:
/^.*\%17v.
次のコマンドも同樣の動作ですが、17 列目に文字が存在しなくてもマッチします:
/^.*\%<18v.
Note:
これは "^" 無しでも最初のカラムに居たままマッチします。17 列目もハイライトされます:/.*\%17v".*" がゼロ幅文字として別の文字にマッチするため 17 列目は ’hlsearch’ によりハイライトされます。
\i | 識別子文字 (’isident’ 參照) |
\I | "\i" と同じですが、數字は除外します |
\k | キーワード文字 (’iskeyword’ 參照) |
\K | "\k" と同じですが、數字は除外します |
\f | ファイル名の文字 (’isfname’ 參照) |
\F | "\f" と同じですが、數字は除外します |
\p | 印字可能文字 (’isprint’ 參照) |
\P | "\p" と同じですが、數字は除外します |
Note:
上記のものはマルチバイト文字に對しても機能します。次のものは、示された範圍の ASCII 文字だけがマッチします。
\s | 空白文字: | <Space> と <Tab> |
\S | 空白文字以外。\s の反對です | |
\d | 數字: | [0-9] |
\D | 數字以外: | [^0-9] |
\x | 16 進數字: | [0-9A-Fa-f] |
\X | 16 進數字以外: | [^0-9A-Fa-f] |
\o | 8 進數字: | [0-7] |
\O | 8 進數字以外: | [^0-7] |
\w | 單語を構成する文字: | [0-9A-Za-z_] |
\W | 單語を構成する文字以外: | [^0-9A-Za-z_] |
\h | 單語の先頭の文字: | [A-Za-z_] |
\H | 單語の先頭の文字以外: | [^A-Za-z_] |
\a | 英字: | [A-Za-z] |
\A | 英字以外: | [^A-Za-z] |
\l | 小文字英字: | [a-z] |
\L | 小文字英字以外: | [^a-z] |
\u | 大文字英字: | [A-Z] |
\U | 大文字英字以外: | [^A-Z] |
Note:
これらのアトムは |/[]| を使ふよりも高速です。
Note:
’ignorecase’, "\c", "\C" は文字クラスには影響しません。
x は上記の文字クラスのどれかです。文字クラスと改行がマッチします。
(文字クラスここまで)
<Esc> にマッチします
<Tab> にマッチします
<CR> にマッチします
<BS> にマッチします
改行にマッチします。バッファのテキストではなく、文字列 (|expr-string|) とマッチングするときは、リテラルの改行文字がマッチします。
最後に置換された文字列とマッチします
パターンをカッコでまとめます たとへば、"\(^a\)" は行頭の ’a’ にマッチします。
\( と \) に圍まれた最初の部分正規表現がマッチした文字列と、同じ文字列にマッチします。
たとへば、"\([a-z]\).\1" は "ata", "ehe", "tot" などにマッチします。
"\1" と同じですが、2 番目の部分正規表現を使ひます
"\1" と同じですが、9 番目の部分正規表現を使ひます
Note:
部分正規表現の番號は、最初の "\(" から數へて、左から右へ、順番に番號が付けられます。マッチする順番ではありません。
パターンをカッコでまとめます
\(\) と同じですが、部分正規表現としてカウントされません。たくさんのグループを作ることができますし、處理が少し高速です。
特別な意味のない文字は、その文字自身とマッチします
バックスラッシュと文字の組合せで、現在、特別な意味を持つてゐない文字は、將來の擴張のために豫約されてゐます。
コレクションです。複數の文字を角カッコで圍みます。コレクションに含まれる任意の 1 文字とマッチします。
例 | マッチするもの |
[xyz] | ’x’、’y’、’z’ のどれか |
[a-zA-Z]$ | 行末の英字 |
\c[a-z]$ | 同上 |
[А-яЁё] | ロシア語アルファベット (utf-8 と cp1251) |
"\_" を付けた場合、コレクションは改行も含みます。コレクションに "\n" を含めた場合と同じですが、"\_" を付けた場合は、コレクションの先頭が "^" の場合でも改行にマッチします。つまり、"\_[^ab]" は "a" や "b" 以外の文字と改行にマッチします。
これは Vi 互換です。"\_" や "\n" を使はなければ、改行にはマッチしません。
’]’ がない場合、Vim はエラーを表示せず、コレクションが使はれてゐるのではないと判斷します。’[’ を檢索するときに便利です。しかし、Vim 內部での檢索では E769 のエラーがでます。そして、‘:substitute
‘ コマンドでコマンド全體がパターンとなることに注意してください。例へば、":s/[/x/" は "[/x" を檢索します。置換はおこなはれません。"[" を檢索して "x" に置換するのではありません!
コレクション文字列の先頭が "^" の場合、コレクションに含まれてゐる文字以外の文字がマッチします。"[^xyz]" は ’x’、’y’、’z’ 以外の文字にマッチします。
名前 | 函數 | 含んでゐるもの |
[:alnum:] | isalnum | ASCII の英數字 |
[:alpha:] | isalpha | ASCII の英字 |
[:blank:] | スペースと Tab 文字 | |
[:cntrl:] | iscntrl | コントロール文字 |
[:digit:] | 10 進數字 | |
[:graph:] | isgraph | スペース以外の印字可能文字 |
[:lower:] | (1) | 小文字英字 (’ignorecase’ がオンのときはすべての英字) |
[:print:] | (2) | スペースを含む印字可能文字 |
[:punct:] | ispunct | ASCII の句讀點 |
[:space:] | 空白文字 (スペース、Tab、改ページ文字) | |
[:upper:] | (3) | 大文字英字 (’ignorecase’ がオンのときはすべての英字) |
[:xdigit:] | 16 進數字 | |
[:return:] | <CR> 文字 | |
[:tab:] | <Tab> 文字 | |
[:escape:] | <Esc> 文字 | |
[:backspace:] | <BS> 文字 | |
[:ident:] | 識別子文字 ("\i" と同じ) | |
[:keyword:] | キーワード文字 ("\k" と同じ) | |
[:fname:] | ファイル名の文字 ("\f" と同じ) |
角カッコで圍んだ文字クラス表現を、コレクションの角カッコ內に書きます。たとへば、"[-./[:alnum:]_~]\+" は、UNIX のファイル名として妥當なパターンです。このパターンは ’-’, ’.’, ’/’, 英數字, ’_’, ’~’ のどの文字の組合せでも、1 文字以上の文字列にマッチします。
これらのものは、8 ビット文字のみマッチします。ただし、新しい正規表現エンジンを使用してゐる場合は [:lower:] と [:upper:] のみマルチバイト文字にも作用します。|two-engines| を參照。將來的にはこれらの項目は、マルチバイト文字に作用するやうになるでせう。現狀 "alpha" の全てを得るには [[:lower:][:upper:]] を使ふ事ができます。
"函數" 列はどのライブラリ函數が使はれるかを示してゐます。實裝はシステムに依存します。特殊なものは以下の通りです:
[=a=]
[.a.]
リテラル文字の ’]’、’^’、’-’、’\’ をコレクションに含めるには、バックスラッシュを前置して、"[xyz\]]"、"[\^xyz]"、"[xy\-z]"、"[xyz\\]" と書きます。
Note:
POSIX ではこのやうなバックスラッシュの使ひ方はサポートされてゐません。
’]’ は、コレクションの先頭、または ’^’ の直後にそのまま書いて、"[]xyz]" や "[^]xyz]" とすることができます。
’-’ も、先頭や末尾にそのまま書いて "[-xyz]", "[^-xyz]", "[xyz-]" とすることができます。’\’ も指定文字 "^]-\bdertnoUux" 以外の文字の前ならそのまま書けます。"[\xyz]" は、’\’, ’x’, ’y’, ’z’ の文字にマッチします。しかし、常に "\\" と書くやうにした方がいいでせう。’\’ と何かの文字の組合せは將來的に擴張に使はれる可能性があります。
\e | <Esc> |
\t | <Tab> |
\r | <CR> (改行文字ではありません) |
\b | <BS> |
\n | 改行。|/[\n]| 參照。 |
\d123 | 10 進數の文字番號 |
\o40 | 8 進數の文字番號 (最大値 0377) |
\x20 | 16 進數の文字番號 (最大値 0xff) |
\u20AC | 16 進數のマルチバイト文字番號 (最大値 0xffff) |
\U1234 | 16 進數のマルチバイト文字番號 (最大値 0xffffffff) |
Note:
他のバックスラッシュによる特殊文字の表記は、[] の中では機能しません。
任意にマッチするアトム列です。これは常にマッチします。アトム單位で最長一致し、最初にアトムがマッチしなかつたところでストップします。例:
/r\%[ead]
これは、"r", "re", "rea", "read" にマッチします。1 番長いマッチが使はれます。Ex コマンドの "function" は、"fu" が必須で、"nction" は省略可能ですが、次の例は、そのやうなものにマッチします:
/\<fu\%[nction]\>
"full" の "fu" にマッチするやうなことがないやうに、單語末尾のアトム "\>" が使はれてゐます。使ふ機會はあまりないかもしれませんが、普通の文字以外のアトムを使つて、さらに複雜なものも表現できます。例:
/\<r\%[[eo]ad]\>
これは、"r", "re", "ro", "rea", "roa", "read", "road" にマッチします。[] の中では \(\), \%(\), \z(\) は使へません。\%[] はネストできません。"[" を含めるには "[[]" を、"]" を含めるには "[]]" を使つてください。例:
/index\%[[[]0[]]]
これは "index", "index[", "index[0", "index[0]" にマッチします。
{|+syntax| が有效な場合のみ利用可能}
10 進數で指定した文字にマッチします。このアトムの後ろには數字以外の文字を置いてください。
8 進數で指定した文字にマッチします (最大値 0377)。040 より小さい値を指定するとき、このアトムの後ろには 8 進數字以外の文字か、數字以外の文字を置いてください。
16 進數で指定した文字にマッチします。2 桁まで。
16 進數で指定した文字にマッチします。4 桁まで。
16 進數で指定した文字にマッチします。8 桁まで。0x7fffffff まで。
オプション ’ignorecase’ がオンの場合、普通の英字の大文字と小文字の違ひは無視されます。’smartcase’ がオンの場合、パターンが大文字を含んでゐないときだけ、大文字と小文字が無視されます。 "\c" はパターン中のどこにでも置くことができ、パターン全體が、’ignorecase’ をオンにした狀態で處理されます。實際の ’ignorecase’ と ’smartcase’ の設定は無視されます。"\C" は "\c" の反對の意味で、大文字と小文字は必ず區別されます。
{Vim だけが \c と \C をサポートしてゐます}
Note:
’ignorecase’, "\c", "\C" は文字クラスには作用しません。
例:
パターン | ’ignorecase’ | ’smartcase’ | マッチするもの |
foo | off | - | foo |
foo | on | - | foo Foo FOO |
Foo | on | off | foo Foo FOO |
Foo | on | on | Foo |
\cfoo | - | - | foo Foo FOO |
foo\C | - | - | foo |
技術的な說明:
ファイル中の <Nul> 文字は、<NL> 文字としてメモリに保存され、ディスプレイには "^@" と表示されます。これは、ファイルを讀み書きする時に變換されます。檢索パターンに <Nul> をマッチさせるには、CTRL-@ か "CTRL-V 000" を入力します。この動作はそれほど違和感がないはずです。
檢索パターンの <Nul> 文字は內部で <NL> に變換されてゐます。CTRL-V CTRL-J をタイプした場合も <NL> が入力されるので、ファイル中の <Nul> を檢索するのに使へますが、この動作は不自然に感じるかもしれません。
’fileformat’ が "mac" の場合、ファイル中の <NL> は內部では <CR> で保存され、テキストの中では "^J" として表示されます。他では、<NL> と <Nul> の場合と同じやうに扱はれます。
スクリプトでは、パターン中の <NL> は、文字列中の <NL> とマッチします。"\n" (バックスラッシュと n) は <NL> とはマッチしません。バッファ中のテキストとのマッチの場合のみ、"\n" は改行とマッチします。
マルチバイト文字を使つたパターンは、たいていは、ユーザーが期待したとほりに機能します。しかし、不正なバイトでトラブルが起こることもあります。不正なバイトを含むパターンはおそらく、決してマッチしません。
パターンに "\Z" が含まれてゐる場合、すべての合成文字は無視されます。そのため、どの合成文字が、いくつ結合されてゐても、基底文字とマッチするだけでマッチします。’encoding’ が "utf-8" の場合だけ使用します。例外: パターンが 1 つか複數の合成文字で開始してゐる場合は、それらはマッチします。 すべての合成文字をスキップするには "\%C" を使ひます。例へば、パターン "a" は "càt" (a に 0x0300 が合成されてゐる) にはマッチしませんが、"a\%C" にはマッチします。Note: これは "cát" (á は 0xe1 といふ文字で、合成文字を持つてゐない) にはマッチしません。"cat" (a のみ) にはマッチします。
合成文字と合成されないアイテムの直後に合成文字がある場合、その合成文字を含んでゐるすべての文字がマッチします。
{譯注: x が合成文字として /x/ /\(x\)/ /\zsx/ など}
ドットと合成文字を使ふと、どの文字に合成されてゐても、その合成文字にマッチします。
{譯注: x が合成文字として /.x/ と書く}
合成文字の順番は關係ありません。また、指定した以上の合成文字がテキストにあつても、それはマッチします。ただし、パターンで指定したすべての合成文字がテキストに含まれてゐる必要があります。
例へば B が基底文字で x と y が合成文字として:
パターン | テキスト | マッチ |
Bxy | Bxy | yes (完全マッチ) |
Bxy | Byx | yes (順番違ひ) |
Bxy | By | no (x がない) |
Bxy | Bx | no (y がない) |
Bx | Bx | yes (完全マッチ) |
Bx | By | no (x がない) |
Bx | Bxy | yes (餘計な y は無視される) |
Bx | Byx | yes (餘計な y は無視される) |
Vim と Perl の正規表現は、とても似てゐて、同じ事ができます。違ひは表記だけです。違ひの要約を示します:
效果 | Vim の表記 | Perl の表記 |
---|---|---|
大文字と小文字を區別しない | \c | (?i) |
大文字と小文字を區別する | \C | (?-i) |
後方參照しないグループ | \%(atom\) | (?:atom) |
最短一致の量指定子 | \{-n,m} | *?, +?, ??, {}? |
幅ゼロの肯定先讀み | atom\@= | (?=atom) |
幅ゼロの否定先讀み | atom\@! | (?!atom) |
幅ゼロの肯定後讀み | atom\@<= | (?<=atom) |
幅ゼロの否定後讀み | atom\@<! | (?<!atom) |
强慾な量指定子 | atom\@> | (?>atom) |
Vim と Perl では文字列中の改行の扱ひが少し違ひます:
Perl では、’^’ と ’$’ はテキストの最先頭と最末尾にマッチしますが、’m’ フラグを使ふと、テキストの中閒の改行にもマッチするやうになります。’s’ フラグを使ふと、’.’ が改行にもマッチするやうなります。’m’ と ’s’ のフラグは、上記の (?i) フラグのやうに、パターン中で設定することもできます。
Vim では、’^’ と ’$’ は常に中閒の改行にもマッチします。最先頭と最末尾にはそれぞれ、’\%^’ と ’\%$’ がマッチします。Perl の ’s’ フラグに對應するのは ’\_’ 修飾子です。’.’ や文字クラスの前に ’\_’ を付けると、改行にもマッチするやうになります。
次のものは Perl だけの機能です:
次のものは Vim だけの機能です:
カレントウィンドウ內で强調表示するパターンを定義します。强調には {group} が使はれます。例:
:highlight MyGroup ctermbg=green guibg=green :match MyGroup /TODO/
{pattern} の區切りには // 以外の文字を使ふことができます。’"’ や ’|’ などの特別な文字を使ふときは注意してください。
{group} は、コマンドを實行する前に定義しておく必要があります。
{group} の强調は、’hlsearch’ や構文强調 (’syntax’ 參照) の强調よりも優先されます。
Note:
’hlsearch’ の强調はすべてのウィンドウに適用されますが、":match" はカレントウィンドウだけです。ウィンドウのバッファを切り替へても、强調表示は維持されます。
’ignorecase’ の設定は使はれません。大文字と小文字は區別されます。大文字と小文字の違ひを無視するには、|/\c| を使ひます。
’redrawtime’ を設定すると、檢索に費やす時閒を制限できます。
改行にマッチしてゐるときに、Vim がディスプレイの一部だけを再描畫すると、豫期しない結果になることがありますが、それは、Vim が再描畫した行からマッチの檢索を開始するからです。
|matcharg()| は |:match| コマンドで使用されたパターンと强調グループを返します。|getmatches()| は |matchadd()| と |:match| で定義されたマッチのパターンと强調グループのリストを返します。
|:match| コマンドではマッチを 3 つまで定義できます (|:match|, |:2match|, |:3match|)。|matchadd()| にはこのやうな制限はありません。加へて、優先順位を設定することもできます。
次の例は、表示桁で 72 列目以降の文字をすべて强調表示します:
:highlight rightMargin term=bold ctermfg=blue guifg=blue :match rightMargin /.\%>72v/
表示桁で 7 列目の文字をすべて强調表示するには次のやうにします:
:highlight col8 ctermbg=grey guibg=grey :match col8 /\%<8v.\%>7v/
Note:
TAB のやうな文字は、1 桁を超えて表示されます。
以前に定義したマッチパターンを消去します。
上述の |:match| と同じですが、別々のマッチを設定します。そのため、同時に 3 つのマッチを表示できます。同じ場所でマッチした場合は、數値の低いものが優先されます。
":3match
" コマンドは |matchparen| プラグインで使用されてゐます。あなたが手動でマッチを設定するときは ":match
" を使つてください。他のプラグインでは ":2match
" を使つてください。
{譯注:
譯語:
concat | 連接 |
multi | >量指定子< 量指定詞 數量子 數量詞 |
ordinary atom | 普通のアトム |
a sequence of optionally matched atoms | 任意にマッチするアトム列 |
last search pattern | 最終檢索パターン |
}