Підсумовуючи, немає. Регекс 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". (Не публікую як відповідь, тому що я не позитивний)