Регулярное выражение Vim для замены символов /escape pipe
Предположим, что у меня есть прямая:
a|b|c
Я хотел бы запустить регулярное выражение, чтобы преобразовать его в:
a\|b\|c
В большинстве движков регулярных выражений, с которыми я знаком, что-то вроде s%\|%\\|%g
должно работать. Если я попробую это в Vim, я получаю:
\|a\||\|b\||\|c
Как оказалось, я обнаружил ответ, набрав этот вопрос. В любом случае, я отправлю его с моим решением, так как я был немного удивлен тем, что поиск не выявил дубликатов.
Ответы
Ответ 1
vim имеет свой собственный синтаксис регулярных выражений. Существует сравнение с PCRE в vim help doc.
кроме этого, vim не имеет магии/магии/очень волшебного режима. :h magic
, чтобы проверить таблицу.
по умолчанию vim имеет режим magic
. если вы хотите сделать команду :s
в своем вопросе, просто активируйте very magic
:
:s/\v\|/\\|/g
в основном это своего рода RTFM вещь...
Ответ 2
В этом отношении Vim делает противоположное PCRE: |
является символом буквальной трубы, \|
служит в качестве оператора чередования. Я не мог найти подходящую escape-последовательность, потому что символ канала не должен быть экранирован.
Следующая строка работает для строки в моем примере:
:. s%|%\\|%g
Ответ 3
Если вы используете very-magic
(используйте \v
), вы будете иметь поведение Perl/pcre для большинства специальных символов (кроме специфических vim):
:s#\v\|#\\|#g