Вопрос
Из вопроса Как заменить символ для перевода строки в Vim?.Вы должны использовать при замене текста для новой строки, например, так
:%s/%/\r/g
Но при замене конца строк и перевода строк для символа вы можете сделать это следующим образом:
:%s/\n/%/g
В каком разделе руководства описаны эти модели поведения и каковы причины, стоящие за ними?
Решение
\r
Матчи <CR>
\n
соответствует значению в конце строки - При сопоставлении в строке вместо буферного текста сопоставляется буквенный символ новой строки .
Другие советы
От http://vim.wikia.com/wiki/Search_and_replace :
При Поиске
...
\n
является новой строкой,\r
являетсяCR
(возврат каретки =Ctrl-M
=^M
)При Замене
...
\r
является новой строкой,\n
является нулевым байтом (0x00
).
Другим аспектом этого является то, что \0
, который традиционно равен НУЛЮ, берется в
s//\0/
означать "весь согласованный шаблон".(Который, кстати, избыточен с, и длиннее, чем, &
).
- Таким образом, вы не можете использовать
\0
означатьNULL
, поэтому вы используете\n
- Таким образом, вы не можете использовать
\n
означать\n
, поэтому вы используете\r
. - Таким образом, вы не можете использовать
\r
означать\r
, но я не знаю, кто хотел бы добавить этот символ специально.
—☈
:help NL-used-for-Nul
Технические детали:
<Nul>
символы в файле хранятся в виде<NL>
в памяти.На дисплее они отображаются как "^@
".Перевод выполняется при чтении и записи файлов.Чтобы соответствовать<Nul>
с помощью шаблона поиска вы можете просто ввести CTRL-@ или "CTRL-V 000".Вероятно, это именно то, чего вы ожидаете.Внутренне символ заменяется на<NL>
в шаблоне поиска.Что необычно, так это то, что набор текста CTRL-V CTRL-J также вставляет<NL>
, таким образом , также выполняется поиск<Nul>
в файле.{Vi не может обработать<Nul>
символы в файле вообще}
Прежде всего, откройте :h :s
ознакомиться с разделом "4.2 Замена" документации по "Изменению".Вот что принимает команда:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Обратите внимание на описание pattern
и string
Для
{pattern}
видишь|pattern|
.
{string}
может быть буквальной строкой или чем-то еще
особенный;видишь|sub-replace-special|
.
Итак, теперь вы знаете, что шаблон поиска и шаблон замены подчиняются разным правилам.Если вы перейдете по ссылке на |pattern|
, это приведет вас к разделу, в котором объясняются все шаблоны регулярных выражений, используемые в Vim.
Тем временем, |sub-replace-special|
это приведет вас к разделу "4.2 Замена", который содержит шаблоны для замены, среди которых \r
для разрыва строки / разделения.
(Краткий путь к этой части руководства таков :h :s%
)