В итоге нет. Регулярное выражение Vim - это уникальный аромат, и нет никаких вариантов, чтобы заставить его вести себя как другой аромат.
Я думаю, что это хорошо.
магия
'magic'
Вариант не изменяет вкус регулярных выражений , что Вим использует. Он просто переворачивает поведение многих \
-экранированных атомов.
Например, по умолчанию +
это буквальный +
символ, где \+
означает «один или несколько предшествующих атомов». Напротив, *
означает «ноль или более предшествующего атома», хотя \*
является литералом *
. Многие люди находят это довольно запутанным. Использование \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
Lookaround - это общая функция, где вы можете утверждать, что шаблон либо не соответствует, либо не совпадает до или после шаблона, который вы пытаетесь сопоставить. Например, шаблон PCRE q(?!u)
(или шаблон регулярного выражения Vim qu\@!
) соответствует a q
, за которым не следует a u
. (Это более правильно, чем q[^u]
, что требует наличия некоторого символа после q
.)
Переменная длина отрицательный взгляд позади
У PCRE и многих других разновидностей есть ограничение, согласно которому шаблон с отрицательным внешним видом должен иметь фиксированную длину. Это означает, что шаблон типа (?<![a-z]{3})foo
«строка, которой foo
не предшествуют ровно 3 строчные буквы») - это хорошо, но (?<![a-z]+)foo
(что означает «строка, которой foo
не предшествует любое количество строчных букв») - нет.
Это ограничение не существует в Vim. В Vim такой шаблон, на который \([a-z]\+\)\@<!foo
, возможно, немного некрасиво смотреть, вполне допустим.
Проще в Vim regex
Некоторые вещи намного приятнее во вкусе регулярных выражений Vim.
Начало и конец матча якоря
Наиболее заметными, на мой взгляд, являются \zs
и \ze
якоря. Это позволяет вам указать начало и конец матча. Например, foo(\zs.*\ze)
соответствует только то, что находится между (
и )
в вызове функции, как foo(...)
. Это можно сделать в PCRE, но это требует использования lookaround, что немного утомительно:(?<=foo\().*(?=\))
Соответствие префикса
Еще одна интересная вещь, которую может сделать Vim, - сопоставить любой префикс (включая пустой префикс) определенной последовательности символов. Например, в соответствии с f
, fo
, foo
или food
, шаблон f\%[ood]
может быть использован. В PCRE такой шаблон будет выглядеть так f(o(od?)?)?
. (Вообразите это для более длинной последовательности!)
Соответствующие позиции курсора, строки и столбца
В регулярном выражении Vim есть несколько якорей для сопоставления позиций в буфере.
\%23c
соответствует столбцу 23
\%<23c
совпадения перед столбцом 23
\%>23c
совпадения после столбца 23
\%16l
соответствует линии 16
- Как и в столбце, есть якоря до или после номера строки
\%#
соответствует позиции курсора
Я думаю, что стоит принять вкус регулярных выражений Vim. Он хорошо подходит для использования в текстовом редакторе, используемом в основном для программирования, и он довольно мощный.
\v
включает в себя<>
границы слов, которые AFAIK является уникальным для Vim. Так что нет, просто опишите их как "Vim Regex". (Не отправлять как ответ, потому что я не уверен)