Vim: \ n против \ r - PullRequest
       39

Vim: \ n против \ r

23 голосов
/ 08 декабря 2008

Я некоторое время не использовал vim в системе Unix, но, насколько я помню, \ r не было, это всегда было \ n.

Я использую gVim под Windows, и когда я ищу для символов новой строки, я использую \ n. Поиск \ r ничего не возвращает. Но когда я заменяю символов, я должен использовать \ r. дайте мне ^ @

Кто-нибудь может объяснить, что здесь происходит?

Ответы [ 8 ]

25 голосов
/ 08 декабря 2008

Похоже, вы спрашиваете две вещи. Одна проблема - \r против \n, которую освещали другие.

Другая проблема - \n справа от замены. Если вы посмотрите на :h s/\n, это говорит о том, что \n в заменяющей части замещения вставляет <NUL> / <NL>, а НЕ перевод строки.

Если вы выполните :%s/\n/\n/ и сохраните и откроете файл в шестнадцатеричном редакторе, все символы ^@ будут ASCII 0 (NUL-символы). Почему разработчики Vim используют \n слева для конца строки и \n справа для NUL, мне не понятно. Но это специфическое поведение не имеет ничего общего с Windows против Unix.

22 голосов
/ 08 декабря 2008

Поиск вверх:

:set fileformat=unix
:set fileformat=dos

Это можно использовать на любой платформе для переключения на другую кодировку.

6 голосов
/ 05 января 2009

За кулисами Vim использует \ r (возврат каретки) для сохранения Конца строк (независимо от формата файла, который имеет значение только при чтении или записи файла). Vim использует \ n для представления NUL. Тем не менее, вы ищете EOL как \ n, но при замене \ n обозначает NUL. Это объясняется в: h sub-replace-sepcial. Поиск \ r найдет возврат каретки, который не был частью EOL файлового формата. Длинное объяснение по адресу: h file-format.

3 голосов
/ 09 декабря 2008
:%s/^V^M/^V^M/g

Аналогично, следующее делает то же самое (я думаю), и его легче набрать.

:%s/\r/\r/g
3 голосов
/ 08 декабря 2008

vim возится с возвратами каретки (\ r) и символами новой строки (\ n). Например, если вы работаете в Unix, а vi показывает строки, заканчивающиеся на '^ M', потому что это текстовые файлы Windows, простой способ избавиться от них - ввести команду

:%s/^V^M/^V^M/g

Не похоже, что это должно что-то делать, но это так.

2 голосов
/ 08 декабря 2008

Я думаю, что проблема может заключаться в том, что Windows и Unix переводят строки. Формат для Unix \ n (перевод строки), но для Windows это \ r \ n (возврат каретки, перевод строки).

2 голосов
/ 08 декабря 2008

В Unix, внутри vim, ^V + <enter> дает мне ^M, то есть символ \r.

Кроме того, вы не можете найти \r внутри vim, если вы не скажете ему отредактировать файл в двоичном режиме, то есть без использования автоматического режима по умолчанию, где он автоматически определяет окончание строки. (в статусе должно быть напечатано [dos].)

0 голосов
/ 08 декабря 2008

В Windows, если вы открываете файл в текстовом режиме, \ n интерпретируется как символы новой строки и перевода строки. Обычно это не так для * nix систем.

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