パターン

Nvim :help ページは、ソースからtree-sitter-vimdocパーサーを使用して生成されています。


パターンと検索コマンド
基本的な事項はユーザーマニュアルの03.9セクションに記載されています。さらに詳しい説明は第27章usr_27.txtにあります。

1. 検索コマンド 検索コマンド

/
/{pattern}[/]<CR> {pattern}の[count]番目の出現箇所を前方検索します。exclusive
/{pattern}/{offset}<CR> {pattern}の[count]番目の出現箇所を前方検索し、{offset}行上または下に移動します。linewise
/<CR>
/<CR> 最新使用パターンlast-patternの[count]番目の出現箇所を、最新使用{offset}で前方検索します。
//{offset}<CR> 最新使用パターンlast-patternの[count]番目の出現箇所を、新しい{offset}で前方検索します。{offset}が空の場合、オフセットは使用されません。
?
?{pattern}[?]<CR> {pattern}の[count]番目の前の出現箇所を後方検索します。exclusive
?{pattern}?{offset}<CR> {pattern}の[count]番目の前の出現箇所を後方検索し、{offset}行上または下に移動します。linewise
?<CR>
?<CR> 最新使用パターンlast-patternの[count]番目の出現箇所を、最新使用{offset}で後方検索します。
??{offset}<CR> 最新使用パターンlast-patternの[count]番目の出現箇所を、新しい{offset}で後方検索します。{offset}が空の場合、オフセットは使用されません。
n
n 最新の"/"または"?"を[count]回繰り返します。カーソルが移動しない場合、検索はcount + 1で繰り返されます。last-pattern
N
N 最新の"/"または"?"を[count]回、逆方向に繰り返します。last-pattern
star E348 E349 * カーソルに最も近い単語の[count]番目の出現箇所を前方検索します。検索に使用される単語は、以下の最初のものです。1. カーソル下のキーワード'iskeyword' 2. 現在の行のカーソル後の最初のキーワード 3. カーソル下の空白以外の単語 4. 現在の行のカーソル後の最初の空白以外の単語 "/\<keyword\>"コマンドのように、キーワード全体のみが検索されます。exclusive 'ignorecase'が使用され、'smartcase'は使用されません。 v_star-default
{Visual}* ビジュアルモードでは、現在の選択範囲を前方検索します。default-mappings
#
# "*"と同じですが、後方検索します。ポンド記号(文字163)も機能します。"#"キーがバックスペースとして機能する場合は、Vimを起動する前に "stty erase <BS>" を使用してみてください(<BS>CTRL-H または実際バックスペースです)。 v_#-default
{Visual}# ビジュアルモードでは、現在の選択範囲を後方検索します。 default-mappings
gstar
g* "*"と同様ですが、単語の前後に"\<"と"\>"を付けません。これにより、単語全体ではない一致も検索されます。
g#
g# "#"と同様ですが、単語の前後に"\<"と"\>"を付けません。これにより、単語全体ではない一致も検索されます。
gd
gd ローカル宣言に移動します。カーソルがローカル変数上にある場合、このコマンドはその宣言にジャンプします。これはCコードで動作するように作られており、他の言語ではうまく動作しない場合があります。最初にVimは "[[ "のように現在の関数の開始部分を検索します. 見つからない場合は、検索は 1 行目で停止します。見つかった場合は、Vim は空白行が見つかるまで戻ります。この位置から Vim は "*" のようにカーソル下のキーワードを検索しますが、コメントのように見える行は無視されます ('comments' オプションを参照)。これは必ずしも動作するとは限らないことに注意してください。Vim は構文を実際にチェックするのではなく、キーワードとの一致を検索するだけです。インクルードファイルも検索する必要がある場合は、include-search にリストされているコマンドを使用してください。このコマンドの後、n は次のマッチを前方検索します (後方ではありません)。
gD
gD グローバル宣言に移動します。カーソルがファイル内で定義されているグローバル変数上にある場合、このコマンドはその宣言にジャンプします。これは "gd" と同じように動作しますが、キーワードの検索は常に 1 行目から開始される点が異なります。
1gd
1gd "gd" と同様ですが、カーソル位置の前に終わる {} ブロック内の一致は無視します。
1gD
1gD "gD" と同様ですが、カーソル位置の前に終わる {} ブロック内の一致は無視します。
CTRL-C
CTRL-C 現在の (検索) コマンドを中断します。ノーマルモードでは、保留中のコマンドはすべて中止されます。
:noh :nohlsearch :noh[lsearch] 'hlsearch' オプションの強調表示を停止します。検索コマンドを使用するか、'hlsearch' オプションを設定すると、自動的に再びオンになります。このコマンドは自動コマンドでは機能しません。強調表示の状態は自動コマンドの実行時に保存および復元されるためです autocmd-searchpat。ユーザー関数を呼び出す場合も同じです。
検索パターンを入力している間、'incsearch' オプションがオンになっている場合、現在の一致が表示されます。表示された一致箇所でカーソルを実際に配置するには、<CR>で検索コマンドを終了する必要があることに注意してください。または、<Esc>を使用して検索を中止します。
nohlsearch-auto
'hlsearch' オプションを設定すると、最後に使用した検索パターンのすべての一致が強調表示されます。これは :nohlsearch コマンドで一時停止するか、nohlsearch プラグインで自動一時停止できます。nohlsearch-install を参照してください。
'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.
注: カウントはオフセットを考慮しません。
一致が見つからない場合は、次のエラーが発生します: E486 パターンが見つかりません :global コマンドでは、Vi 互換性のために通常のメッセージ "パターンが見つかりません" が表示されることに注意してください。:s コマンドでは、"e" フラグを使用してエラーメッセージを回避できます :s_flags
検索オフセット {offset} これらのコマンドは、指定されたパターンを検索します。"/" と "?" では、追加のオフセットを指定できます。オフセットには、行オフセットと文字オフセットの 2 種類があります。
オフセットは、見つかった一致を基準としたカーソル位置を示します: [num] [num] 行下、1 列目 +[num] [num] 行下、1 列目 -[num] [num] 行上、1 列目 e[+num] [num] 一致の終わりの右に文字数 e[-num] [num] 一致の終わりの左に文字数 s[+num] [num] 一致の始まりの右に文字数 s[-num] [num] 一致の始まりの左に文字数 b[+num] [num] 上記の s[+num] と同じ (ニーモニック: begin) b[-num] [num] 上記の s[-num] と同じ (ニーモニック: begin) ;{pattern} 別の検索を実行する、//; を参照
'-' または '+' が指定されているが [num] が省略されている場合は、カウント 1 が使用されます。'e' でオフセットを含めると、検索は包括的になります (カーソルが置かれる文字が操作に含まれます)。
パターン カーソル位置
/test/+1 "test" の 1 行下、1 列目 /test/e "test" の最後の t 上 /test/s+2 "test" の 's' 上 /test/b-3 "test" の 3 文字前
これらのコマンドのいずれかを演算子の後に使用すると、検索の前後のカーソル位置の間の文字が影響を受けます。ただし、行オフセットが指定されている場合は、2 つのカーソル位置の間の行全体が影響を受けます.
パターンで一致を検索し、一致を別の単語に変更する方法の例
/foo<CR>        find "foo"
c//e<CR>        change until end of match
bar<Esc>        type replacement
//<CR>                go to start of next match
c//e<CR>        change until end of match
beep<Esc>        type another replacement
                etc.
//; E386 非常に特殊なオフセットは、';' の後に別の検索コマンドが続くものです。例えば
/test 1/;/test
/test.*/+1;?ing?
最初のものは最初に "test 1" の次の出現箇所を見つけ、次にその後の "test" の最初の出現箇所を見つけます。
これは、2 つの検索コマンドを連続して実行するのと同じですが、次の点が異なります。
演算子の後の単一のモーションコマンドとして使用できます。
後続の "n" または "N" コマンドの方向は、最初の検索コマンドから取得されます。
エラーが発生した場合、カーソルはまったく移動しません。
last-pattern (最後に使用したパターン)
最後に使用したパターンとオフセットは記憶されます。これらを使用して、おそらく別の方向または別のカウントで検索を繰り返すことができます。2 つのパターンが記憶されていることに注意してください。"通常" の検索コマンド用と置換コマンド ":s" 用です。空のパターンが指定されるたびに、以前に使用されたパターンが使用されます。ただし、以前の検索コマンドがない場合は、可能であれば、以前の置換パターンが使用されます。
'magic' オプションは、最後に使用したパターンに付随します。'magic' を変更しても、最後に使用したパターンの解釈方法は変更されません。'ignorecase' オプションはこれを行いません。'ignorecase' が変更されると、パターンが他のテキストと一致するようになります。
'hlsearch' オプションを設定すると、最後に使用した検索パターンのすべての一致が強調表示されます。
最後に使用した検索パターンをクリアするには
:let @/ = ""
これはパターンを空の文字列に設定しません。なぜなら、それはどこにでもマッチしてしまうからです。パターンは、Vim を起動したときのように、実際にクリアされます。
検索は通常、カーソルを移動させないマッチをスキップします。次のマッチが次の文字で見つかるか、スキップされたマッチの後で見つかるかは、'cpoptions' の 'c' フラグに依存します。cpo-c を参照してください。 'c' フラグがある場合: "/..." は 1 から 3 文字進みます。 'c' フラグがない場合: "/..." は 1 文字進みます。 'c' フラグによる予測不能性は、最初の列で検索を開始し、カーソル位置を越えたマッチが見つかるまでマッチをスキップすることによって引き起こされます。
後方検索の場合、上記のように 'cpoptions' の 'c' フラグを使用して、行の先頭から検索が開始されます。次に、カーソル位置の前の最後のマッチが使用されます。
Vi では、":tag" コマンドは、タグが検索されたときに最後の検索パターンを設定します。Vim ではこれは行われず、'cpoptions' に 't' フラグが存在しない限り、以前の検索パターンが記憶されています。検索パターンは常に検索履歴に格納されます。
'wrapscan' オプションがオンの場合(デフォルト)、検索はバッファの末尾を折り返します。'wrapscan' が設定されていない場合、後方検索は先頭で停止し、前方検索はバッファの末尾で停止します。'wrapscan' が設定されていて、パターンが見つからなかった場合は、エラーメッセージ "pattern not found" が表示され、カーソルは移動しません。'wrapscan' が設定されていない場合、前方検索ではメッセージは "search hit BOTTOM without match" になり、後方検索では "search hit TOP without match" になります。wrapscan が設定されていて、検索がファイルの末尾を折り返す場合、後方検索では "search hit TOP, continuing at BOTTOM"、前方検索では "search hit BOTTOM, continuing at TOP" というメッセージが表示されます。これは、'shortmess' オプションの 's' フラグを設定することでオフにすることができます。このメッセージには、強調表示方法 'w' が使用されます(デフォルト:強調表示)。
検索範囲
検索コマンド "/" を特定の行範囲に制限するには、\%>l 項目を含めます。たとえば、199 行目より下、300 行目より上で "limit" という単語をマッチさせるには
/\%>199l\%<300llimit
/\%>l も参照してください。
別の方法は、'c' フラグを付けて ":substitute" コマンドを使用することです。例:
:.,300s/Pattern//gc
このコマンドは、カーソル位置から 300 行目まで "Pattern" を検索します。マッチすると、文字を入力するように求められます。このマッチで停止するには 'q' を入力し、次のマッチを見つけるには 'n' を入力します。
"*", "#", "g*"、"g#" コマンドは、カーソルの近くの単語をこの順序で検索し、最初に見つかったものが使用されます。
現在カーソル下にあるキーワード。
カーソルの右側にある、同じ行にある最初のキーワード。
現在カーソル下にある WORD。
カーソルの右側にある、同じ行にある最初の WORD。キーワードには、文字と 'iskeyword' に含まれる文字のみを含めることができます。WORD には、空白以外の文字(<Tab><Space>)を含めることができます。10 本の指で入力する場合、文字は覚えやすいことに注意してください。"#" は左手の中指の下(左上方向に検索)、"*" は右手の中指の下(右下方向に検索)にあります。(これはキーボードレイアウトによって異なります)。
E956
非常にまれなケースですが、正規表現が再帰的に使用されることがあります。これは、パターンの実行に時間がかかり、チャネル上のメッセージをチェックするときに、パターンも使用するコールバックが呼び出されたり、自動コマンドがトリガーされたりする場合に発生する可能性があります。ほとんどの場合、これは問題ありませんが、パターンが使用中に再び使用されると、失敗します。通常、これはパターンに問題があることを意味します。
まずは、ユーザーマニュアルの第 27 章 usr_27.txt を読んでください。
/bar /\bar /pattern 1. パターンは、"\|" で区切られた 1 つ以上のブランチです。ブランチのいずれかにマッチするすべてのものにマッチします。例: "foo\|beep" は "foo" と "beep" にマッチします。複数のブランチがマッチする場合、最初のブランチが使用されます。
pattern ::= branch または branch \| branch または branch \| branch \| branch など
/branch /\& 2. ブランチは、"\&" で区切られた 1 つ以上の連結です。最後の連結にマッチしますが、先行するすべての連結も同じ位置でマッチする場合のみです。例: "foobeep\&..." は "foobeep" の "foo" にマッチします。 ".*Peter\&.*Bob" は "Peter" と "Bob" の両方を含む行にマッチします。
branch ::= concat または concat \& concat または concat \& concat \& concat など
/concat
3. 連結は、連結された 1 つ以上のピースです。最初のピースのマッチ、2 番目のピースのマッチなどの後にマッチします。例: "f[0-9]b" は、最初に "f"、次に数字、次に "b" にマッチします。
concat ::= piece または piece piece または piece piece piece など
/piece
4. ピースはアトムであり、その後にマルチ(アトムを何回マッチできるかを示す)が続く場合があります。例: "a*" は "a" 文字の任意のシーケンス(""、"a"、"aa" など)にマッチします。/multi を参照してください。
piece ::= atom または atom multi
/atom
5. アトムは、長いアイテムリストのいずれかになります。多くのアトムは、テキスト内の 1 文字にマッチします。多くの場合、通常の文字または文字クラスです。括弧を使用して、パターンをアトムにすることができます。"\z(\)" 構文は、構文の強調表示専用です。
atom ::= ordinary-atom /ordinary-atom または \( pattern \) /\( または \%( pattern \) /\%( または \z( pattern \) /\z(
/\%#= 2つのエンジン NFA Vim には 2 つの正規表現エンジンが含まれています。1. すべてをサポートする古いバックトラッキングエンジン。2. 一部のパターンでははるかに高速に動作し、一部のパターンでは遅くなる可能性のある新しい NFA エンジン。 E1281
Vim は自動的に適切なエンジンを選択します。ただし、問題が発生した場合、または特定のエンジンを明示的に選択したい場合は、パターンの前に次のいずれかを付けることができます。
\%#=0 自動選択を強制します。'regexpengine' がゼロ以外の値に設定されている場合にのみ効果があります。 \%#=1 古いエンジンの使用を強制します。 \%#=2 NFA エンジンの使用を強制します。
また、'regexpengine' オプションを使用してデフォルトを変更することもできます。
E864 E868 E874 E875 E876 E877 E878 NFA エンジンを選択し、実装されていないものに遭遇した場合、パターンはマッチしません。これは、Vim のデバッグ時にのみ役立ちます。

3. マジック /magic

パターン内の一部の文字(文字など)は文字通りに解釈されます。テキスト内のまったく同じ文字にマッチします。ただし、バックスラッシュが前に付くと、これらの文字は特別な意味を持つ場合があります。たとえば、"a" は文字 "a" にマッチしますが、"\a" は任意のアルファベット文字にマッチします。
他の文字は、バックスラッシュなしで特別な意味を持ちます。文字通りにマッチさせるには、バックスラッシュを前に付ける必要があります。たとえば、"." は任意の文字にマッチしますが、"\." はドットにマッチします。
文字が文字通りに解釈されるかどうかは、'magic' オプションと、次に説明するパターン内のアイテムによって異なります。'magic' オプションは常に設定する必要がありますが、Vi 互換性のためにオフにすることができます。ここでは完全を期すために 'nomagic' の効果について説明しますが、それを使用することはお勧めしません。 /\m /\M "\m" を使用すると、その後のパターンは、'magic' オプションの実際の値を無視して、'magic' が設定されているかのように解釈されます。"\M" を使用すると、その後のパターンは、'nomagic' が使用されているかのように解釈されます。 /\v /\V "\v" を使用すると、その後の '0'-'9'、'a'-'z'、'A'-'Z'、'_' 以外のすべての ASCII 文字は特別な意味を持ちます。"very magic"
"\V" を使用すると、その後のバックスラッシュと終了文字(通常は / または?)のみが特別な意味を持ちます。"very nomagic"
後: \v \m \M \V マッチ
'magic' 'nomagic' a a a a リテラル 'a' \a \a \a \a 任意のアルファベット文字 . . \. \. 任意の文字 \. \. . . リテラルドット $ $ $ \$ 行末 * * \* \* 直前のアトムの任意の回数 ~ ~ \~ \~ 最新の置換文字列 () \(\) \(\) \(\) アトムとしてのグループ | \| \| \| 何もなし: 選択肢を区切る \\ \\ \\ \\ リテラルバックスラッシュ \{ { { { リテラル中括弧
'magic' オプションの設定/未設定の影響を受けないようにするには、パターンの先頭に "\m" または "\M" を付けます。

4. パターン項目の概要 パターン概要

E865 E866 E867 E869
マルチ項目の概要。 /multi E61 E62 詳細な説明と例は以下にあります。リンクをたどってください。 E64 E871
multi
'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 以上 できるだけ少なく
E59
/\@> \@> \@> 1、パターン全体にマッチする場合と同様 /\@= \@= \@= 何もマッチせず、マッチが必要 /ゼロ幅 /\@! \@! \@! 何もマッチせず、マッチしてはならない /ゼロ幅 /\@<= \@<= \@<= 何もマッチせず、後ろにマッチが必要 /ゼロ幅 /\@<! \@<! \@<! 何もマッチせず、後ろにマッチしてはならない /ゼロ幅
通常の原子の概要。 /通常のアトム
詳細な説明と例は以下に示します。リンクをたどってください。
通常のアトム
マジック ノーマジック マッチ
/^ ^ ^ 行頭(パターンの先頭) /ゼロ幅 /\^ \^ \^ リテラル '^' /\_^ \_^ \_^ 行頭(どこでも使用可能) /ゼロ幅 /$ $ $ 行末(パターンの末尾) /ゼロ幅 /\$ \$ \$ リテラル '$' /\_$ \_$ \_$ 行末(どこでも使用可能) /ゼロ幅 /. . \. 任意の1文字(行末以外) /\_. \_. \_. 任意の1文字または行末 /\< \< \< 単語の先頭 /ゼロ幅 /\> \> \> 単語の末尾 /ゼロ幅 /\zs \zs \zs 何でも、マッチの開始位置を設定 /\ze \ze \ze 何でも、マッチの終了位置を設定 /\%^ \%^ \%^ ファイルの先頭 /ゼロ幅 E71
/\%$ \%$ \%$ ファイルの末尾 /ゼロ幅 /\%V \%V \%V ビジュアルエリア内 /ゼロ幅 /\%# \%# \%# カーソル位置 /ゼロ幅 /\%'m \%'m \%'m マークmの位置 /ゼロ幅 /\%l \%23l \%23l 23行目 /ゼロ幅 /\%c \%23c \%23c 23列目 /ゼロ幅 /\%v \%23v \%23v 仮想23列目 /ゼロ幅
文字クラス: /文字クラス
マジック ノーマジック マッチ
/\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は上記のいずれかの文字: 行末を含む文字クラス (文字クラスの終わり)
マジック ノーマジック マッチ
/\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番目の\(\)を使用 E68
/\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の「結合文字」の違いを無視する。母音付きのヘブライ語またはアラビア語のテキストを検索する場合に便利。
マジック ノーマジック マッチ
/\m \m \m パターンの後続の文字に対して'magic' を有効にする /\M \M \M パターンの後続の文字に対して'magic' を無効にする /\v \v \v パターンの後続の文字は「非常にマジック」 /\V \V \V パターンの後続の文字は「非常にノーマジック」 /\%#= \%#=1 \%#=1 正規表現エンジンを選択 /ゼロ幅
/\%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)にはマッチしない。
アトムの後には、アトムが何回、どのようにマッチできるかを示す記号を付けることができます。これはマルチと呼ばれます。概要については、/マルチ を参照してください。
/スター /\スター * ('magic' が設定されていない場合は\*を使用) 直前のアトムに0回以上、できるだけ多くマッチする。
'nomagic' マッチの例
a* a\* "", "a", "aa", "aaa"など .* \.\* 何でも、空文字列も含む、行末なし \_.* \_.\* バッファの末尾までのすべて \_.*END \_.\*END バッファ内の最後の "END" までを含むすべて
例外:"*"がパターンの先頭または "^" の直後で使用されている場合、スター文字にマッチします。
"\_."を繰り返すと、大量のテキストにマッチし、時間がかかる場合があることに注意してください。たとえば、 "\_.*END" は、現在の位置からファイル内の "END" の最後の出現箇所までのすべてのテキストにマッチします。"*"はできるだけ多くマッチするため、最初にファイルの末尾まですべての行をスキップし、次に1文字ずつバックアップして "END" のマッチを試みます。
/\+
\+ 直前のアトムに1回以上、できるだけ多くマッチする。
マッチの例
^.\+$ 空でない行 \s\+ 少なくとも1文字の空白
/\=
\= 直前のアトムに0回または1回、できるだけ多くマッチする。
マッチの例
foo\= "fo" および "foo"
/\?
\? \= と同じ。"?"コマンドで逆方向に検索する場合は使用できません。
/\{ E60 E554 E870 \{n,m} 直前のアトムにn回からm回、できるだけ多くマッチする \{n} 直前のアトムにn回マッチする \{n,} 直前のアトムに少なくともn回、できるだけ多くマッチする \{,m} 直前のアトムに0回からm回、できるだけ多くマッチする \{} 直前のアトムに0回以上、できるだけ多くマッチする("*"と同様) /\{-
\{-n,m} 直前のアトムにn回からm回、できるだけ少なくマッチする \{-n} 直前のアトムにn回マッチする \{-n,} 直前のアトムに少なくともn回、できるだけ少なくマッチする \{-,m} 直前のアトムに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" または "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" のマッチを試みるからです。
\& を使用すると、\@= を使用した場合と同じように機能することに注意してください。"foo\&.." は "\(foo\)\@=.." と同じです。ただし、\& を使用した方が簡単で、括弧は必要ありません。
/\@!
\@! 直前のアトムが現在の位置でマッチしない場合、幅ゼロでマッチする。 /ゼロ幅 Perlの "(?!pattern)" と同様。
マッチの例
foo\(bar\)\@! "bar" が後続しない "foo" a.\{-}p\@! "a", "ap", "app", "appp"など、直後に "p" がない \(\(then\)\@!.\)*$ "then" が後続しない "if "
"\@!" の使用は、パターンが一致しない場所が多いため、注意が必要です。"a.*p\@!" は "a" から行末まで一致します。なぜなら ".*" は行内のすべての文字と一致し、行末の "p" とは一致しないからです。"a.\{-}p\@!" は、後続に "p" がない "a"、"ap"、"app" などと一致します。なぜなら "." は "p" と一致する可能性があり、"p\@!" はその後ろとは一致しないからです。
"\@!" を使用して、一致する位置の前に非一致を探すことはできません。"\(foo\)\@!bar" は "foobar" の "bar" と一致します。なぜなら "bar" が一致する位置では "foo" が一致しないからです。"foobar" との一致を避けるには "\(foo\)\@!...bar" を使用できますが、これは行頭の bar とは一致しません。"\(foo\)\@<!bar" を使用してください。
便利な例: "bar" を含まない行で "foo" を見つける
/^\%(.*bar\)\@!.*\zsfoo
このパターンは、最初に "bar" が一致する位置がその行にないことを確認します。".*bar" がどこかで一致する場合、\@! はパターンを拒否します。一致するものがない場合、任意の "foo" が見つかり ます。"\zs" は、一致が "foo" の直前から始まるようにするためです。
/\@<=
\@<= 前の atom が直後に続くものの直前で一致する場合、ゼロ幅で一致します。 /zero-width Perl の "(?<=pattern)" と同様ですが、Vim は固定幅でないパターンを許可します。
マッチの例
\(an\_s\+\)\@<=file "an" と空白または行末の後の "file" 速度のためには、この multi を避ける方がはるかに優れていることがよくあります。代わりに "\zs" を使用してみてください /\zs。上記の例と同じものを一致させるには: an\_s\+\zsfile 少なくとも、後読みの制限を設定してください。以下を参照してください。
"\@<=" と "\@<!" は、直後に続くものの直前での一致をチェックします。理論的には、これらのマッチはこの位置の前のどこからでも開始できます。しかし、必要な時間を制限するために、直後に続くものが一致する行と、その前の 1 行 (存在する場合) のみが検索されます。これはほとんどのものと一致し、遅すぎないのに十分なはずです。
古い正規表現エンジンでは、"\@<=" と "\@<!" の後のパターンの部分が最初に一致のチェックが行われるため、"\1" のようなものは前の atom 内の \(\) を参照するために機能しません。逆方向には機能します
悪い例の一致
\%#=1\1\@<=,\([a-z]\+\) "abc,abc" の "abc"
ただし、新しい正規表現エンジンは動作が異なるため、この動作に依存しない方が良いでしょう。回避できる場合は \@<= を使用しないでください
マッチの例
\([a-z]\+\)\zs,\1 "abc,abc" の "abc"
\@123<= "\@<=" と同様ですが、123 バイトだけ後読みします。これにより、失敗することがわかっている多くのマッチを試みることを回避し、パターンの実行を非常に遅くすることを防ぎます。例として、"span" の直前に "<" があるかどうかを確認します: /<\@1<=span これは "span" の 1 バイト前でのみ "<" の一致を試みますが、それはとにかく機能する唯一の場所です。行境界を越えた後、制限は行末からの相対値になります。したがって、一致のある行頭の文字はカウントされません (これは単純にするためです)。数値ゼロは制限がないのと同じです。
/\@<!
\@<! 前の atom が直後に続くものの直前で一致しない場合、ゼロ幅で一致します。したがって、現在の行または前の行に、直後に続くものの直前で終わるように atom が一致する位置がない場合、これは一致します。 /zero-width Perl の "(?<!pattern)" と同様ですが、Vim は固定幅でないパターンを許可します。前の atom との一致は、直後に続くものとの一致の直前で終わるように行われるため、".*" で終わる atom は機能します。 警告: これは遅くなる可能性があります (多くの位置で一致をチェックする必要があるため)。可能な場合は制限を使用してください。以下を参照してください。
マッチの例
\(foo\)\@<!bar "foobar" にない "bar" \(\/\/.*\)\@<!in "//" の後ではない "in"
\@123<! "\@<!" と同様ですが、123 バイトだけ後読みします。これにより、失敗することがわかっている多くのマッチを試みることを回避し、パターンの実行を非常に遅くすることを防ぎます。
/\@>
\@> パターン全体と一致するように前の atom と一致します。Perl の "(?>pattern)" と同様です。
マッチの例
\(a*\)\@>a 何もなし ("a*" はすべての "a" を取るため、後続に別の "a" は存在できません)
これは、前の atom がそれ自体がパターンであるかのように一致します。一致しない場合、短いサブマッチなどで再試行されることはありません。この違いを観察してください。"a*b" と "a*ab" はどちらも "aaab" と一致しますが、2 番目のケースでは "a*" は最初の 2 つの "a" のみに一致します。"\(a*\)\@>ab" は "aaab" と一致しません。なぜなら "a*" は "aaa" (できるだけ多くの "a") と一致するため、"ab" は一致できないからです。

6. 通常の atom pattern-atoms

通常の atom は次のとおりです。
/^
^ パターンの先頭または "\|"、"\("、"\%("、"\n" の後: 行頭と一致します。他の位置では、リテラル '^' と一致します。 /zero-width
マッチの例
^beep( C 関数 "beep" の開始 (おそらく)。
/\^
\^ リテラル '^' と一致します。パターンの任意の位置で使用できますが、[] 内では使用できません。
/\_^
\_^ 行頭と一致します。 /zero-width パターンの任意の位置で使用できますが、[] 内では使用できません。
マッチの例
\_s*\_^foo 空白と空行、そして行頭の "foo"
/$
$ パターンの末尾または "\|"、"\)"、"\n" の前 ('magic' がオンの場合): 行末 <EOL> と一致します。他の位置では、リテラル '$' と一致します。 /zero-width
/\$
\$ リテラル '$' と一致します。パターンの任意の位置で使用できますが、[] 内では使用できません。
/\_$
\_$ 行末と一致します。 /zero-width パターンの任意の位置で使用できますが、[] 内では使用できません。"a\_$b" は決して一致しないことに注意してください。なぜなら "b" は行末と一致できないからです。代わりに "a\nb" を使用してください /\n
マッチの例
foo\_$\_s* 行末の "foo" と後続の空白と空行
. ('nomagic' の場合: \.) /. /\. 任意の単一の文字と一致しますが、行末とは一致しません。
/\_.
\_. 任意の単一の文字または行末と一致します。注意: "\_.*" はバッファの末尾までのすべてのテキストと一致します!
/\<
\< 単語の先頭と一致します: 次の文字は単語の最初の文字です。'iskeyword' オプションは、単語文字とは何かを指定します。 /zero-width
/\>
\> 単語の末尾と一致します: 前の文字は単語の最後の文字です。'iskeyword' オプションは、単語文字とは何かを指定します。 /zero-width
/\zs
\zs 任意の位置で一致しますが、[] 内では一致せず、そこに一致の開始を設定します: 次の文字は全体の一致の最初の文字です。 /zero-width
/^\s*\zsif
行頭の "if" と一致し、空白を無視します。複数回使用でき、一致するブランチで見つかった最後のものが使用されます。例
/\(.\{-}\zsFab\)\{3}
"Fab" の 3 回目の出現を見つけます。これには multi を続けることはできません。 E888
/\ze
\ze 任意の位置で一致しますが、[] 内では一致せず、そこに一致の終了を設定します: 前の文字は全体の一致の最後の文字です。 /zero-width 複数回使用でき、一致するブランチで見つかった最後のものが使用されます。例: "end\ze\(if\|for\)" は "endif" と "endfor" の "end" と一致します。これには multi を続けることはできません。 E888
/\%^ start-of-file \%^ ファイルの先頭と一致します。文字列と一致する場合、文字列の先頭と一致します。たとえば、ファイル内の最初の "VIM" を見つけるには
/\%^\_.\{-}\zsVIM
/\%$ end-of-file \%$ ファイルの末尾と一致します。文字列と一致する場合、文字列の末尾と一致します。これはファイル内の最後の "VIM" を見つけるわけではないことに注意してください
/VIM\_.\{-}\%$
これは次の VIM を見つけます。なぜならその後の部分は常に一致するからです。これはファイル内の最後の "VIM" を見つけます
/VIM\ze\(\(VIM\)\@!\_.\)*\%$
これは /\@! を使用して、最初の "VIM" の後のどの位置でも "VIM" が一致しないことを確認します。ファイルの末尾から逆方向に検索する方が簡単です!
/\%V
\%V ビジュアル領域内と一致します。ビジュアルモードがすでに停止している場合は、gv が再選択する領域と一致します。これは /zero-width 一致です。パターン全体がビジュアル領域内にあることを確認するには、パターンの先頭と末尾の直前に配置します。例:
/\%Vfoo.*ba\%Vr
これは "foo bar" のみがビジュアル選択されている場合にも機能します。これは
/\%Vfoo.*bar\%V
ビジュアル選択が "r" の後も続いている場合、"foo bar" と一致します。現在のバッファに対してのみ機能します。
/\%# cursor-position \%# カーソル位置と一致します。ウィンドウに表示されているバッファで一致する場合にのみ機能します。 警告: パターンが使用された後にカーソルが移動されると、結果は無効になります。Vim は一致を自動的に更新しません。これは、構文の強調表示と 'hlsearch' に特に関係します。言い換えれば: カーソルが移動しても、この変更に対して表示は更新されません。更新は、変更された行 (行全体が更新される) または CTRL-L コマンドを使用した場合 (画面全体が更新される) に行われます。例として、カーソル下の単語を強調表示するには
/\k*\%#\k*
'hlsearch' が設定されていて、カーソルを移動して変更を加えると、一致がいつ更新されるかがはっきりとわかります。
/\%'m /\%<'m /\%>'m \%'m マーク m の位置と一致します。\%<'m マーク m の位置の前と一致します。\%>'m マーク m の位置の後と一致します。例として、マーク 's から 'e までのテキストを強調表示するには
/.\%>'s.*\%<'e..
一致にマーク 'e を含めるには、2 つのドットが必要であることに注意してください。これは、"\%<'e" が 'e マークの前の文字と一致し、それが /zero-width 一致であるため、その文字が含まれていないためです。 警告: パターンが使用された後にマークが移動されると、結果は無効になります。Vim は一致を自動的に更新しません。"\%#" /\%# のカーソル移動と同様です。
/\%l /\%>l /\%<l E951 E1204 \%23l 特定の行と一致します。\%<23l 特定の行の上 (行番号が小さい) と一致します。\%>23l 特定の行の下 (行番号が大きい) と一致します。\%.l カーソル行と一致します。\%<.l カーソル行の上と一致します。\%>.l カーソル行の下と一致します。これら 6 つは、バッファ内の特定の行と一致させるために使用できます。"23" は任意の行番号にすることができます。最初の行は 1 です。 警告: 行を挿入または削除しても、Vim は一致を自動的に更新しません。これは、構文の強調表示がすぐに間違ってしまうことを意味します。また、カーソル位置 (".") を参照していて、カーソルが移動しても、この変更に対して表示は更新されません。更新は、CTRL-L コマンドを使用した場合 (画面全体が更新される) に行われます。例として、カーソルが現在配置されている行を強調表示するには
:exe '/\%' .. line(".") .. 'l'
または、次を使用します
/\%.l
'hlsearch' が設定されていて、カーソルを移動して変更を加えると、一致がいつ更新されるかがはっきりとわかります。
/\%c /\%>c /\%<c \%23c 特定の桁にマッチします。 \%<23c 特定の桁より前にマッチします。 \%>23c 特定の桁より後にマッチします。 \%.c カーソルのある桁にマッチします。 \%<.c カーソルのある桁より前にマッチします。 \%>.c カーソルのある桁より後にマッチします。 これら6つは、バッファまたは文字列内の特定の桁にマッチするために使用できます。 「23」は任意の桁番号です。最初の桁は1です。実際には、桁はバイト数です(そのため、マルチバイト文字には正確ではありません)。 警告: テキストを挿入または削除しても、Vimは自動的にマッチを更新しません。これは、構文の強調表示がすぐに間違ってしまうことを意味します。また、カーソル位置(".")を参照していて、カーソルが移動した場合、この変更に対して表示は更新されません。更新は、CTRL-L コマンド(画面全体が更新される)を使用したときに行われます。例として、カーソルが現在置かれている桁を強調表示するには
:exe '/\%' .. col(".") .. 'c'
または、次を使用します
/\%.c
'hlsearch' が設定されていて、カーソルを移動したり変更を加えたりすると、マッチがいつ更新されるかが明確に表示されます。44桁目の1バイトにマッチさせる例
/\%>43c.\%<46c
"." が44桁目のバイトにマッチする場合、"\%<46c" は45桁目にマッチすることに注意してください。 /\%v /\%>v /\%<v \%23v 特定の仮想桁にマッチします。 \%<23v 特定の仮想桁より前にマッチします。 \%>23v 特定の仮想桁より後にマッチします。 \%.v 現在の仮想桁にマッチします。 \%<.v 現在の仮想桁より前にマッチします。 \%>.v 現在の仮想桁より後にマッチします。 これら6つは、バッファまたは文字列内の特定の仮想桁にマッチするために使用できます。ウィンドウ内のバッファとマッチしない場合、現在のウィンドウのオプション値が使用されます(例:'tabstop')。 「23」は任意の桁番号です。最初の桁は1です。タブや画面上で複数の文字を占める他の文字の途中にあるため、一部の仮想桁位置は決してマッチしないことに注意してください。 警告: テキストを挿入または削除しても、Vimは強調表示されたマッチを自動的に更新しません。これは、構文の強調表示がすぐに間違ってしまうことを意味します。また、カーソル位置(".")を参照していて、カーソルが移動した場合、この変更に対して表示は更新されません。更新は、CTRL-L コマンド(画面全体が更新される)を使用したときに行われます。例として、仮想桁72より後のすべての文字を強調表示するには
/\%>72v.*
'hlsearch' が設定されていて、カーソルを移動したり変更を加えたりすると、マッチがいつ更新されるかが明確に表示されます。17桁目までのテキストにマッチさせるには
/^.*\%17v
現在の仮想桁(カーソルがある場所)より後のすべての文字にマッチさせるには
/\%>.v.*
17桁目は含まれていません。これは/zero-width マッチであるためです。桁を含めるには、次のようにします。
/^.*\%17v.
このコマンドは同じことを行いますが、17桁目に文字がない場合にもマッチします。
/^.*\%<18v.
最初の桁にマッチを固定するための "^" がない場合、これは17桁目も強調表示することに注意してください。
/.*\%17v
"." がゼロ文字にマッチする別のマッチがあるため、17桁目は 'hlsearch' によって強調表示されます。
文字クラス: \i 識別子文字('isident' オプションを参照) /\i \I "\i" と同様ですが、数字を除く /\I
\k キーワード文字('iskeyword' オプションを参照) /\k \K "\k" と同様ですが、数字を除く /\K
\f ファイル名文字('isfname' オプションを参照) /\f \F "\f" と同様ですが、数字を除く /\F
\p 印字可能文字('isprint' オプションを参照) /\p \P "\p" と同様ですが、数字を除く /\P
注: 上記はマルチバイト文字にも有効です。以下のものは、範囲が示すように、ASCII文字のみにマッチします。
whitespace white-space \s 空白文字: <Space> および <Tab> /\s
\S 空白以外の文字。\s の反対 /\S \d 数字: [0-9] /\d
\D 数字以外: [^0-9] /\D
\x 16進数字: [0-9A-Fa-f] /\x \X 16進数字以外: [^0-9A-Fa-f] /\X \o 8進数字: [0-7] /\o
\O 8進数字以外: [^0-7] /\O
\w 単語文字: [0-9A-Za-z_] /\w \W 単語以外の文字: [^0-9A-Za-z_] /\W \h 単語の先頭文字: [A-Za-z_] /\h \H 単語の先頭以外の文字: [^A-Za-z_] /\H \a アルファベット文字: [A-Za-z] /\a \A アルファベット以外の文字: [^A-Za-z] /\A \l 小文字: [a-z] /\l
\L 小文字以外: [^a-z] /\L
\u 大文字: [A-Z] /\u
\U 大文字以外: [^A-Z] /\U
注: アトムを使用する方が、[] 形式よりも高速です。
注: 'ignorecase'、"\c"、"\C" は文字クラスでは使用されません。
/\_ E63 /\_i /\_I /\_k /\_K /\_f /\_F /\_p /\_P /\_s /\_S /\_d /\_D /\_x /\_X /\_o /\_O /\_w /\_W /\_h /\_H /\_a /\_A /\_l /\_L /\_u /\_U \_x "x" は上記のいずれかの文字: 行末を追加した文字クラス (文字クラスの終わり)
\e <Esc> にマッチします /\e
\t <Tab> にマッチします /\t
\r <CR> にマッチします /\r
\b <BS> にマッチします /\b
\n 行末にマッチします /\n
バッファテキストの代わりに文字列でマッチする場合、リテラル改行文字にマッチします。
~ 最後に指定された置換文字列にマッチします /~ /\~
\(\) エスケープされた括弧で囲まれたパターン。 /\( /\(\) /\) 例えば、"\(^a\)" は行頭の 'a' にマッチします。これらは9つまでしか使用できません。 "\%(" を使用してさらに追加できますが、サブレッションとしてはカウントされません。 E51 E54 E55 E872 E873
\1 \( と \) の最初のサブレッションによってマッチしたのと同じ文字列にマッチします。 /\1 E65 例: "\([a-z]\).\1" は "ata"、 "ehe"、 "tot" などにマッチします。 \2 "\1" と同様ですが、2番目のサブレッションを使用します。 /\2 ... /\3
\9 "\1" と同様ですが、9番目のサブレッションを使用します。 /\9 注: グループの番号付けは、パターン内でどの "\(" が最初に来るか(左から右へ)に基づいて行われ、最初にマッチしたものに基づいて行われるわけではありません。
\%(\) エスケープされた括弧で囲まれたパターン。 /\%(\) /\%( E53 \(\) と同じですが、サブレッションとしてはカウントされません。これにより、より多くのグループを使用することができ、少し高速になります。
x 特殊な意味のない単一文字は、それ自体にマッチします
/\ /\\ \x 特殊な意味のない単一文字が後に続くバックスラッシュは、将来の拡張のために予約されています
[] ('nomagic' の場合: \[]) /[] /\[] /\_[] /collection E76 \_[] コレクション。これは、角括弧で囲まれた文字のシーケンスです。コレクション内の任意の単一文字にマッチします。
マッチの例
[xyz] 'x'、'y'、または 'z' のいずれか [a-zA-Z]$ 行末の任意のアルファベット文字 \c[a-z]$ 同上 [А-яЁё] ロシア語のアルファベット (utf-8 および cp1251を使用)
/[\n]
"\_" を前に付けると、コレクションには行末も含まれます。コレクションに "\n" を含めることによっても同じことができます。コレクションが "^" で始まる場合にも行末がマッチします!したがって、"\_[^ab]" は行末と "a" と "b" 以外の任意の文字にマッチします。"\_" または "\n" がない場合、コレクションは行末にマッチしないため、Vi と互換性があります。 E769
']' がない場合、Vim はエラーメッセージを表示せず、コレクションが使用されていないとみなします。'[' を検索するのに便利です。ただし、内部検索では E769 が発生します。また、:substitute コマンドでは、コマンド全体がパターンになることに注意してください。例えば、":s/[/x/" は "[/x" を検索して何もないものに置き換えます。"[" を検索して "x" に置き換えるわけではありません!
E944 E945 シーケンスが "^" で始まる場合、コレクションに含まれていない任意の1文字に一致します: "[^xyz]" は 'x'、'y'、'z' 以外のすべてに一致します。
シーケンス内の2文字が '-' で区切られている場合、これはそれらの間のASCII文字の完全なリストの省略形です。たとえば、 "[0-9]" は任意の10進数字に一致します。開始文字が終了文字を超える場合、たとえば [c-a] の場合、E944 が発生します。非ASCII文字を使用できますが、古い正規表現エンジンでは、文字値が256以上離れていてはいけません。たとえば、re=1 を設定した後に [\u3000-\u4000] で検索すると、E945 エラーが発生します。\%#=2 を前に付けると修正されます。
文字クラス式は、その文字クラスに属する文字の集合として評価されます。以下の文字クラスがサポートされています: 名前 関数 内容 ~ [:alnum:] [:alnum:] isalnum ASCIIの文字と数字 [:alpha:] [:alpha:] isalpha ASCIIの文字 [:blank:] [:blank:] スペースとタブ [:cntrl:] [:cntrl:] iscntrl ASCII制御文字 [:digit:] [:digit:] 10進数字 '0' から '9' [:graph:] [:graph:] isgraph スペースを除くASCII印刷可能文字 [:lower:] [:lower:] (1) 小文字('ignorecase' が使用されている場合はすべての文字) [:print:] [:print:] (2) スペースを含む印刷可能文字 [:punct:] [:punct:] ispunct ASCII句読点文字 [:space:] [:space:] 空白文字: スペース、タブ、CR、NL、垂直タブ、フォームフィード [:upper:] [:upper:] (3) 大文字('ignorecase' が使用されている場合はすべての文字) [:xdigit:] [:xdigit:] 16進数字: 0-9, a-f, A-F [:return:] [:return:] <CR> 文字 [:tab:] [:tab:] <Tab> 文字 [:escape:] [:escape:] <Esc> 文字 [:backspace:] [:backspace:] <BS> 文字 [:ident:] [:ident:] 識別子文字("\i" と同じ) [:keyword:] [:keyword:] キーワード文字("\k" と同じ) [:fname:] [:fname:] ファイル名文字("\f" と同じ) 文字クラス式の大括弧は、コレクションを区切る大括弧に追加されます。たとえば、UNIXファイル名には "[-./[:alnum:]_~]\+" が妥当なパターンです。つまり、1文字以上のリストで、各文字は '-'、'.'、'/'、英字、数字、'_'、または '~' のいずれかです。これらの項目は8ビット文字に対してのみ機能しますが、[:lower:] と [:upper:] は、新しい正規表現エンジンを使用している場合、マルチバイト文字に対しても機能します。two-engines を参照してください。将来的には、これらの項目はマルチバイト文字に対して機能する可能性があります。今のところ、すべての「アルファ」文字を取得するには、[[:lower:][:upper:]] を使用できます。
「関数」列は、どのライブラリ関数が使用されているかを示しています。実装はシステムによって異なります。それ以外の場合: (1) ASCII には islower() を使用し、他の文字には Vim 組み込みルールを使用します。(2) Vim 組み込みルールを使用します (3) (1) と同様ですが、isupper() を使用します /[[= [==]
等価クラス。これは、たとえばアクセントを無視する場合など、ほぼ同じ意味を持つ文字が一致することを意味します。これはUnicode、latin1、latin9でのみ機能します。形式は次のとおりです: [=a=] /[[. [..]
照合要素。これは現在、[.a.] の形式で単一文字を受け入れるだけです /\]
リテラルの ']'、'^'、'-'、または '\' をコレクションに含めるには、その前にバックスラッシュを付けます: "[xyz\]]"、"[\^xyz]"、"[xy\-z]"、"[xyz\\]"。(**注:** POSIX はこの方法でのバックスラッシュの使用をサポートしていません)。']' については、最初の文字にすることもできます (可能な "^" の後): "[]xyz]" または "[^]xyz]"。'-' については、最初または最後の文字にすることもできます: "[-xyz]"、"[^-xyz]"、または "[xyz-]"。'\' については、"^]-\bdertnoUux" にない任意の文字が後に続くようにすることもできます。"[\xyz]" は '\'、'x'、'y'、'z' に一致します。ただし、"\\" を使用することをお勧めします。将来の拡張では '\' の後に他の文字が使用される可能性があります。
末尾の ] を省略してもエラーとは見なされません。"[]" は "[]]" のように動作し、']' 文字に一致します。
'cpoptions' に 'l' フラグが含まれていない場合、以下の変換が受け入れられます: \e <Esc> \t <Tab> \r <CR> (行末ではありません!) \b <BS> \n 改行、上記を参照 /[\n] \d123 文字の10進数 \o40 文字の8進数 (最大 0o377) \x20 文字の16進数 (最大 0xff) \u20AC マルチバイト文字の16進数 (最大 0xffff) \U1234 マルチバイト文字の16進数 (最大 0xffffffff) **注:** 上記の他のバックスラッシュコードは [] 内では機能しません!
コレクションとの一致は、テキストの各文字をコレクションの各文字と比較する必要があるため、遅くなる可能性があります。可能な場合は、上記の他のアトムのいずれかを使用してください。例: "\d" は "[0-9]" よりもはるかに高速で、同じ文字に一致します。ただし、新しい NFA 正規表現エンジンは、古いエンジンよりもこれをうまく処理します。
/\%[] E69 E70 E369 \%[] オプションで一致するアトムのシーケンス。これは常に一致します。含まれているアトムのリストのできるだけ多くに一致します。したがって、一致しない最初のアトムで停止します。たとえば
/r\%[ead]
"r"、"re"、"rea"、または "read" に一致します。一致する最長のものが使用されます。"fu" が必須で "nction" がオプションの Ex コマンド "function" に一致させるには、次のようにします
/\<fu\%[nction]\>
語尾アトム "\>" は、"full" の "fu" との一致を避けるために使用されます。アトムが通常の文字ではない場合、より複雑になります。使用する頻度は高くありませんが、可能です。例
/\<r\%[[eo]ad]\>
単語 "r"、"re"、"ro"、"rea"、"roa"、"read"、"road" に一致します。[] 内に \(\)、\%(\)、または \z(\) 項目を含めることはできず、\%[] はネストしません。"[" を含めるには "[[]" を使用し、"]" には []]" を使用します。たとえば、
/index\%[[[]0[]]]
"index"、"index["、"index[0"、"index[0]" に一致します。
\%d123 10進数で指定された文字に一致します。数字以外の文字が続く必要があります。\%o40 最大 0o377 の8進数で指定された文字に一致します。0o40 未満の数字の後には、8進数以外の数字または数字以外の文字が続く必要があります。\%x2a 最大2桁の16進数で指定された文字に一致します。\%u20AC 最大4桁の16進数で指定された文字に一致します。\%U1234abcd 最大8桁の16進数 (最大 0x7fffffff) で指定された文字に一致します

7. パターンでの大文字と小文字の無視 /ignorecase

'ignorecase' オプションがオンの場合、通常の文字の大文字と小文字は無視されます。'smartcase' は、パターンに小文字のみが含まれている場合に大文字と小文字を無視するように設定できます。/\c /\C パターンに "\c" が含まれている場合、パターン全体は 'ignorecase' がオンであるかのように処理されます。'ignorecase''smartcase' の実際の値は無視されます。"\C" はその逆を行います: パターン全体で大文字と小文字の区別を強制します。'ignorecase'、"\c"、"\C" は文字クラスには使用されないことに注意してください。
パターン 'ignorecase' 'smartcase' 一致
foo オフ - foo foo オン - foo Foo FOO Foo オン オフ foo Foo FOO Foo オン オン Foo \cfoo - - foo Foo FOO foo\C - - foo
技術的な詳細: NL-used-for-Nul
ファイル内の <Nul> 文字は、メモリに <NL> として格納されます。表示では "^@" として表示されます。変換はファイルの読み取りと書き込み時に行われます。検索パターンで <Nul> に一致させるには、CTRL-@ または "CTRL-V 000" を入力するだけです。これはおそらくあなたが期待するものとまったく同じです。内部的には、検索パターンで文字が <NL> に置き換えられます。珍しいのは、CTRL-V CTRL-J と入力すると <NL> も挿入されるため、ファイル内の <Nul> も検索されることです。
CR-used-for-NL
'fileformat' が "mac" の場合、ファイル内の <NL> 文字は内部的に <CR> 文字として格納されます。テキストでは "^J" として表示されます。それ以外の場合、これは <Nul> に対する <NL> の使用法と同様に機能します。
式評価で作業する場合、パターン内の <NL> 文字は文字列内の <NL> に一致します。"\n" (バックスラッシュ n) を使用して <NL> に一致させる方法はここでは機能せず、バッファ内のテキストに一致させる場合にのみ機能します。
pattern-multi-byte pattern-multibyte パターンはマルチバイト文字でも機能し、ほとんどの場合、期待どおりに機能します。ただし、無効なバイトは問題を引き起こす可能性があり、無効なバイトを含むパターンは一致しない可能性があります。

8. 文字の合成 patterns-composing

/\Z
パターンに "\Z" が含まれている場合、すべての合成文字は無視されます。したがって、基本文字のみが一致する必要があり、合成文字は異なっていてもよく、合成文字の数は異なっていても構いません。例外: パターンが1つ以上の合成文字で始まる場合、これらは一致する必要があります。 /\%C
"\%C" を使用して、任意の合成文字をスキップします。たとえば、パターン "a" は "càt" (a に合成文字 0x0300 が含まれている) では一致しませんが、"a\%C" は一致します。これは "cát" (á は文字 0xe1 で、合成文字を含んでいない) とは一致しないことに注意してください。"cat" (a は単なる a) とは一致します。
合成文字がパターンの先頭または合成文字を含まない項目の後に表示される場合、この合成文字を含む任意の文字で一致が見つかります。
ドットと合成文字を使用する場合、これは合成文字単独の場合と同じように機能しますが、これが前に何があっても問題ありません。
合成文字の順序は重要ではありません。また、テキストにはパターンよりも多くの合成文字が含まれている場合がありますが、それでも一致します。ただし、パターン内のすべての合成文字がテキスト内に見つかる必要があります。
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 は無視)

9. Perl のパターンとの比較 perl-patterns

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' フラグを設定すると、. も改行と一致するようになります。(ちなみに、これらのフラグはどちらも、上記 i フラグと同じ構文を使用してパターン内で変更できます。)
一方、Vim の ^ と $ は常に埋め込まれた改行と一致し、テキストの最初と最後のみと一致する \%^ と \% という 2 つの別々のアトムがあります。Vim は 2 番目の問題を \_ "修飾子" を提供することで解決します。. または文字クラスの前に置くと、改行にも一致します。
最後に、これらの構文は Perl 固有のものです。
正規表現内での任意のコードの実行: (?{perl code})
条件式: (?(condition)true-expr|false-expr)
...そしてこれらは Vim 固有のものです。
パターンのマジック性の変更: \v \V \m \M (バックスラッシュの多用を避けるのに非常に便利)
オプションで一致するアトムのシーケンス: \%[atoms]
\& ( \| に対する "and" のようなもの。複数の分岐を 1 つの場所で一致させることを強制します)
行/列番号による一致: \%5l \%5c \%5v
一致の開始と終了の設定: \zs \ze

10. 一致の強調表示 match-highlight

構文と一致
一致強調表示メカニズムは、構文の強調表示とは独立していることに注意してください。構文の強調表示は(通常)バッファローカルの強調表示ですが、一致はウィンドウローカルです。両方の方法を自由に組み合わせることができます。一致強調表示関数は、適用するタイミングと方法に少し柔軟性がありますが、通常は厳密なルールなしで一時的な強調表示に使用されます。どちらの方法もテキストを隠蔽するために使用できます。
したがって、matchadd() のような一致関数は構文規則を考慮せず、synconcealed() のような関数はその逆も同様です。
:mat :match :mat[ch] {group} /{pattern}/ 現在のウィンドウで強調表示するパターンを定義します。{group} で強調表示されます。例
:highlight MyGroup ctermbg=green guibg=green
:match MyGroup /TODO/
// の代わりに、任意の文字を使用して {pattern} の開始と終了をマークできます。" や | などの特殊文字の使用には注意してください。
このコマンドが実行される時点で {group} が存在している必要があります。
'hlsearch' で文字を強調表示する場合でも、{group} の強調表示は適用されます。一致の強調表示は 'hlsearch' よりも優先度が高いためです。構文の強調表示('syntax' を参照)も一致によって上書きされます。
'hlsearch' で最後に使用した検索パターンを強調表示するとすべてのウィンドウで使用されますが、":match" で定義されたパターンは現在のウィンドウにのみ存在することに注意してください。別のバッファに切り替えても保持されます。
'ignorecase' は適用されません。大文字小文字を無視するには、パターンで /\c を使用してください. そうしないと、大文字と小文字は区別されます。
'redrawtime' は、パターン一致の検索の最大時間を定義します.
行末に一致し、Vim がディスプレイの一部のみを再描画する場合、予期しない結果が生じる可能性があります。これは、Vim が再描画の開始行で一致を検索するためです。
matcharg()getmatches() も参照してください。前者は、以前の :match コマンドの強調表示グループとパターンを返します。後者は、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/
TAB など、複数の仮想カラムを占める文字にも一致させるために、2 つの項目を使用していることに注意してください。
:mat[ch] :mat[ch] none 以前に定義された一致パターンをクリアします。
:2mat[ch] {group} /{pattern}/ :2match
:2mat[ch] :2mat[ch] none :3mat[ch] {group} /{pattern}/ :3match
:3mat[ch] :3mat[ch] none 上記の :match と同様ですが、別々の一致を設定します。したがって、同時に 3 つの一致をアクティブにすることができます。同じ位置で複数の一致がある場合、番号が小さい一致が優先されます。一致 ID 3 を使用します。":3match" コマンドは、(古い Vim の)matchparen プラグインで使用されます。手動一致には ":match" を、別のプラグインには ":2match" を使用することをお勧めします。さらに良いのは、より柔軟な matchadd()(および同様の)関数を使用することです。

11.あいまい一致 fuzzy-matching

あいまい一致とは、完全に一致しない検索文字列を使用して文字列を一致させることを指します. あいまい一致は、検索文字列のすべての文字が文字列内の任意の場所に同じ順序で存在する場合、文字列と一致します。大文字と小文字は区別されません。一致した文字列では、検索文字列の 2 つの連続した文字の間に他の文字が存在できます。検索文字列に複数の単語がある場合、各単語は個別に一致します。そのため、検索文字列の単語は文字列内の任意の順序で存在できます。
あいまい一致は、次の基準に基づいて、一致した各文字列にスコアを割り当てます。
連続して一致する文字の数。
2 つの連続した一致文字間の文字数(距離)。
単語の先頭での一致
キャメルケース文字での一致(例:CamelCase の Case)
パス区切り文字またはハイフンの後の一致。
文字列内の一致しない文字の数。スコアが最も高い一致文字列が最初に返されます。
たとえば、「get pat」という文字列をあいまい一致を使用して検索すると、「GetPattern」、「PatternGet」、「getPattern」、「patGetter」、「getSomePattern」、「MatchpatternGet」などの文字列と一致します。
matchfuzzy() 関数と matchfuzzypos() 関数は、文字列リスト内で文字列をあいまい検索するために使用できます。matchfuzzy() 関数は、一致する文字列のリストを返します。matchfuzzypos() 関数は、一致のリスト、一致する位置、およびあいまい一致スコアを返します。
:vimgrep の「f」フラグは、あいまい一致を有効にします。
ins-completion のあいまい一致を有効にするには、'completeopt' オプションに「fuzzy」値を追加します。
メイン
コマンド索引
クイックリファレンス