Регулярное выражение 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