Почему существует новая линия для Vim?

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

:%s/%/\r/g

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

:%s/\n/%/g 

В каком разделе руководства указаны эти поведения, и какова их аргументация?

Ответ 1

Из vim docs на шаблонах:

\r соответствует <CR>

\n соответствует концу строки -   При совпадении в строке вместо текст буфера - буквальная строка новой строки   символ соответствует.

Ответ 2

Из http://vim.wikia.com/wiki/Search_and_replace:

При поиске

...

\n - это символ новой строки, \r - CR (возврат каретки = Ctrl-M= ^M)

При замене

...

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

Ответ 3

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

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

-☈

Ответ 4

:help NL-used-for-Nul

Техническая информация:

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


Ответ 5

Прежде всего, откройте :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 Substitute", который содержит шаблоны для подстановки, среди которых \r для разрыва строки/разделения.

(Ярлык для этой части руководства :h :s%)