it-swarm-ru.tech

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

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

:%s/%/\r/g

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

:%s/\n/%/g 

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

241
Vinko Vrsalovic

От vim docs на шаблонах :

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

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

152
pjz

От http://vim.wikia.com/wiki/Search_and_replace :

при поиске

...

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

При замене

...

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

186
Limited Atonement

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

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

-☈

100
rking

:help NL-used-for-Nul

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

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


47
Aristotle Pagaltzis

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

10
syockit