Если у меня есть магическое регулярное выражение Vim в строковом литерале, есть ли способ преобразовать все регулярное выражение в альтернативное представление, использующее другой магический режим, чтобы я мог вставить это эквивалентное регулярное выражение в исходный код?
Например, если я хочу преобразовать этот шаблон магического режима:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
в очень магический режим, чтобы сделать его более читабельным, что-то вроде:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
Я часто делаю ошибки, пытаясь конвертировать их вручную.
regular-expression
Му Разум
источник
источник
[0-9]+
в не волшебное ... ;-)Ответы:
Команда
должно быть достаточно, чтобы преобразовать практически любой шаблон в
\v
режим. Это не поменяет\m
маркер - хотя, насколько я знаю, это невозможно в одной замене. Это достаточно короткий, чтобы набирать вручную, хотя, и тогда вы можете просто сделать:s/\\m/\\v
для маркера режима.\W
является сокращением, для[^a-zA-Z0-9_]
которого (отрицательный) набор символов работает в очень магическом режиме. Это просто удаляет любые обратные слэши, непосредственно предшествующие одному из этих символов. Известная проблема: это заменит\\
внутренние строки на\
. Вы можете заменить\W
на,\c[^a-z0-9\_]
чтобы смягчить это, но он все равно испортит ваш литерал регулярного выражения, если вы запустите его несколько раз, а также потерпите неудачу на более длинных escape-строках (содержащих,\\\\
например)Обновление: оригинальный вопрос неясно, если вам нужно преобразовать
\v
обратно\m
, но команда есть:источник