Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Поиск вверх:

:set fileformat=unix
:set fileformat=dos

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

Ответ 2

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

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

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

Ответ 3

За кулисами Vim использует \r (возврат каретки) для сохранения End-Of-Lines (независимо от формата файла, что имеет значение только при чтении или записи файла). Vim использует \n для представления NUL. Тем не менее, вы ищете EOL как \n, но при замене \n означает NUL. Это объясняется в: h заменой-заменой. Поиск \r найдет возврат каретки, которые не были частью файла EOL. Существует длинное объяснение в форматах файлов: h.

Ответ 4

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

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

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

Ответ 5

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

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

:%s/\r/\r/g

Ответ 6

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

Ответ 7

В unix, внутри vim, ^V + <enter> дает мне ^M, который является символом \r.

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

Ответ 8

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