要約すると、いいえ。Vimの正規表現は独自のフレーバーであり、他のフレーバーのように動作させるオプションはありません。
これは良いことだと思います。
マジック
この'magic'
オプションは、Vimが使用する正規表現のフレーバーを変更しません。多くの\
エスケープされた原子の動作を単純に反転させます。
たとえば、デフォルトで+
は、リテラル+
文字であり、\+
「1つまたは複数の先行するアトム」を意味します。対照的に、*
は「直前のアトムのゼロ個以上」を意味し、while \*
はリテラル*
です。多くの人がこれを非常に混乱させています。\v
パターンで使用すると、パターンの一貫性が少し高くなります。:help 'magic'
良い要約を与えます:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
個人的には、デフォルトの動作はfoo(
、リテラルを使用してのようなものを検索することは珍しくないコードファイルには適していると思います(
。
Vim独自の正規表現フレーバー
VimがPCREをサポートすることを望む多くの人々を目撃しました。個人的には、他のツールがVimの正規表現をサポートしていることを望みます。PCREで実現できない、または面倒な機能があります。
PCREでは不可能
ルックアラウンドは、一致しようとしているパターンの前または後にパターンが一致するかしないかをアサートできる一般的な機能です。たとえば、PCREパターンq(?!u)
(またはVim regex pattern qu\@!
)q
は、後に続かないに一致しu
ます。(これは、より正確であるq[^u]
が存在することを必要とする、いくつかの後の文字がq
。)
可変長の負の後読み
PCRE、および他の多くのフレーバーには、負の後読みパターンが固定長でなければならないという制限があります。つまり(?<![a-z]{3})foo
、「正確に3つの小文字foo
が先行しないストリング」を意味するのようなパターンは適切ですが、(?<![a-z]+)foo
(「任意の数の小文字foo
が先行しないストリング」を意味する)はそうではありません。
この制限はVimには存在しません。Vimでは、のようなパターン\([a-z]\+\)\@<!foo
は少し見苦しいかもしれませんが、完全に有効です。
Vim正規表現で簡単に
いくつかのことは、Vimの正規表現の味の方がはるかに優れています。
マッチのアンカーの開始と終了
私の意見では、最も注目すべきは\zs
、\ze
アンカーです。これらにより、一致の開始と終了を指定できます。たとえばfoo(\zs.*\ze)
、(
など)
の関数呼び出しでとの間にあるもののみに一致しfoo(...)
ます。これはPCREで実行できますが、lookaroundを使用する必要があり、少し面倒です。(?<=foo\().*(?=\))
プレフィックス一致
Vimができるもう1つのクールなことは、特定の文字シーケンスの任意のプレフィックス(空のプレフィックスを含む)に一致することです。たとえば、、、、またはに一致するf
にfo
はfoo
、food
パターンf\%[ood]
を使用できます。PCREでは、このようなパターンは次のようになりf(o(od?)?)?
ます。(長い文字列を想像してみてください!)
カーソル、行、列の位置を一致させる
Vimの正規表現には、バッファー内の位置を一致させるためのアンカーがあります。
\%23c
列23に一致
\%<23c
列23の前に一致
\%>23c
列23の後に一致
\%16l
16行目と一致
- 列と同様に、のためのアンカーがあるの前または後の行番号
\%#
カーソル位置と一致します
Vimの正規表現のフレーバーを採用することは価値があると思います。主にプログラミングに使用されるテキストエディタでの使用に適し、非常に強力です。
\v
含まれていることは間違い<>
ありません。いいえ、単に「Vim regex」と記述してください。(私は肯定的ではないため、回答として投稿しません)