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

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

:%s/$/|/g

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

:%s/$/|$/g

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

То же самое можно было бы задать с помощью символа начала строки ^.


person asteri    schedule 18.12.2012    source источник
comment
Если вы хотите явно сопоставить новые строки (например, чтобы удалить их или для быстрой многострочной замены), используйте \n.   -  person romainl    schedule 18.12.2012


Ответы (1)


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

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

Подробнее см. http://www.regular-expressions.info/anchors.html. Детали.

person Rohit Jain    schedule 18.12.2012
comment
Отличный ответ и отличная ссылка. Спасибо. - person asteri; 18.12.2012
comment
См. также :help /zero-width. - person ib.; 20.12.2012