Підсумовуючи, немає. Регекс Vim - це унікальний аромат, і немає варіантів, щоб змусити його вести себе як інший аромат.
Я думаю, що це гарна річ.
Магія
Цей 'magic'
параметр не змінює аромат регулярного виразу, який використовує Vim. Він просто перевертає поведінку багатьох \
атомів, що ухиляються.
Наприклад, за замовчуванням +
є буквальним +
символом, де \+
означає "один або більше попереднього атома". На відміну від цього, *
означає "нуль або більше попереднього атома", а \*
є буквальним *
. Багато людей вважають це досить заплутаним. Використання \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(
, використовуючи буквальне (
.
Вiм власний аромат регексу
Я був свідком багатьох людей, які бажають, щоб Vim підтримував PCRE. Особисто я хотів би, щоб інші інструменти підтримували аромат регексу Vim. Він має деякі можливості, які неможливо або занадто громіздко досягти в PCRE.
Неможливо в PCRE
Орієнтування - це загальна особливість, де ви можете стверджувати, що візерунок не відповідає або не відповідає шаблону, який ви намагаєтеся зіставити. Наприклад, шаблон PCRE q(?!u)
(або Vge regex pattern qu\@!
) відповідає а q
, за яким не слідує a u
. (Це правильніше, ніж те q[^u]
, що вимагає, щоб після символу був якийсь символ q
.)
Відстань негативної змінної довжини
PCRE та багато інших ароматів мають обмеження, що негативний вигляд візерунка повинен мати фіксовану довжину. Це означає, що такий зразок (?<![a-z]{3})foo
, що означає "рядок, якому foo
не передують рівно 3 маленькі літери"), добре, але (?<![a-z]+)foo
(маючи на увазі "рядок, якому foo
не передує жодна кількість малих літер"), це не так.
Це обмеження не існує у Vim. У Vim такий малюнок \([a-z]\+\)\@<!foo
, хоча, можливо, трохи негарний для погляду, цілком справедливий.
Простіше у Vim regex
Деякі речі набагато приємніші в ароматі виге Виге.
Початок і кінець якоря для матчу
На мою думку, найбільш помітними є \zs
і \ze
якір. Вони дозволяють вказати початок і кінець матчу. Наприклад, foo(\zs.*\ze)
відповідає лише тому, що між функцією дзвінка (
та )
у функціональному виклику foo(...)
. Це можна зробити за допомогою PCRE, але це вимагає використання способу пошуку, який є трохи стомлюючим:(?<=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". (Не публікую як відповідь, тому що я не позитивний)