Почему - это перевод строки для Vim?

StackOverflow https://stackoverflow.com/questions/71417

  •  09-06-2019
  •  | 
  •  

Вопрос

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

:%s/%/\r/g

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

:%s/\n/%/g 

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

Это было полезно?

Решение

От vim-документы по шаблонам:

\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%)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top