Почему новая строка для Vim? - PullRequest
241 голосов
/ 16 сентября 2008

Из вопроса Как заменить символ для новой строки в Vim? . Вы должны использовать \ r при замене текста на новую строку, например

:%s/%/\r/g

Но при замене конца строки и новой строки на символ вы можете сделать это следующим образом:

:%s/\n/%/g 

Какой раздел руководства документирует это поведение и что за ним стоит?

Ответы [ 5 ]

185 голосов
/ 12 сентября 2012

С http://vim.wikia.com/wiki/Search_and_replace:

При поиске

...

\n - перевод строки, \r - CR (возврат каретки = Ctrl-M = ^M)

при замене

...

\r - новая строка, \n - нулевой байт (0x00).

99 голосов
/ 12 сентября 2012

Другим аспектом этого является то, что \0, который традиционно равен NULL, берется в s//\0/ означает «весь подобранный образец». (Который, кстати, избыточен с & и длиннее).

  • То есть вы не можете использовать \0 для обозначения NULL, поэтому вы используете \n
  • То есть вы не можете использовать \n для обозначения \n, поэтому вы используете \r.
  • Так что вы не можете использовать \r для обозначения \r, но я не знаю, кто захочет добавить этот символ специально.

-☈

47 голосов
/ 16 сентября 2008

:help NL-used-for-Nul

Техническая деталь:

<Nul> символов в файле сохраняются как <NL> в памяти. На дисплее они показаны как "^@". Перевод сделан при чтении и письме файлы. Чтобы сопоставить <Nul> с шаблоном поиска, вы можете просто ввести CTRL - @ или « CTRL-V 000». Это, вероятно, именно то, что вы ожидаете. Внутренне символ заменяется на <NL> в шаблоне поиска. Что необычного что при наборе CTRL-V CTRL-J также вставляется <NL>, таким образом также выполняется поиск <Nul> в файле. {Vi вообще не может обрабатывать <Nul> символов в файле}


10 голосов
/ 10 декабря 2013

Прежде всего, откройте :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%)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...