Существует множество текстовых редакторов. Есть редакторы для людей, которые любят жить в терминале, и для тех, кто (по какой-то причине) находит удовольствие в использовании графического интерфейса. Для первой категории Vim остается самым популярным текстовым редактором. (Не верьте мне! Верьте этому ежегодному всемирному опросу разработчиков от Stack Overflow).

Чем больше вы работаете в Vim, тем больше интересных моментов он вам подбрасывает. Недавно я столкнулся с одним таким интересным вариантом использования Vim.

Vim предлагает очень мощные команды поиска и замены даже без какой-либо настройки. Вы можете заменить одно совпадение, все совпадения в строке, все совпадения в диапазоне строк или все совпадения во всем документе. С помощью одной команды :%s/foo/bar/g можно сделать так много всего.

Но что интересно здесь, так это то, что вы должны использовать разные символы для поиска новой строки и для замены символа на новую строку. Это означает, что новая строка представлена ​​разными символами в зависимости от того, хотите ли вы использовать ее в foo или в bar в ссылке на приведенную выше команду.

При поиске новая строка представлена как \n,но при замене новая строка представлена ​​как \r. Даже многочисленные поиски в Google не дают никакой значимой информации о причинах такого поведения. Большинство людей просто говорят вам, что это происходит, но не могут объяснить, почему.

Но пользователь в этом ТАК ответе очень скромно указывает на причину.

Символы в части foo, т. е. при поиске, работают так, как и ожидается:

\0 — нулевой символ

\n — Новая строка

\r — Возврат каретки.

Однако \0 уже имел зарезервированное использование в заменах регулярных выражений — это означает «весь совпадающий шаблон». Таким образом, вы не можете использовать \0 для обозначения нулевого символа, поэтому вместо него использовался \n. Теперь что-то должно было представлять символ новой строки, поэтому вместо него использовалась \r.

Что касается возврата каретки, я думаю, об этом не позаботились. Кто вообще захочет намеренно вставлять только возврат каретки?