В VIM, почему вы не должны добавлять обратно $ в поиске и замене?

Я узнал, как выполнять более сложные функции поиска и замены в VIM, и я наткнулся на такой пример использования:

:%s/$/|/g

Предположительно, это находит конец каждой строки и заменяет его вертикальной трубой. Впрочем, когда я впервые узнал об этом, я предполагал, что вам придется добавить символ конца строки в строку замены, чтобы получить ожидаемые результаты. т.е.

:%s/$/|$/g

Почему это работает без него и все еще сохраняет разрыв строки? Разве это не должно заменять завершающий символ строки вашей строкой и удалять его в процессе?

То же самое можно спросить с помощью символа начала строки, ^,

1 ответ

Решение

Анкер $ не включает символ новой строки. На самом деле это токен нулевой ширины. Он соответствует пустому символу непосредственно перед первой новой строкой в ​​вашей строке. И отсюда и результат.

Так же, ^ соответствует пустому символу перед первым символом в вашей строке.

См. http://www.regular-expressions.info/anchors.html для получения более подробной информации.

Другие вопросы по тегам