Как преобразовать разрыв строки ^ M в «нормальный» перевод строки в файле, открытом в vim? - PullRequest
463 голосов
/ 01 мая 2009

vim показывает на каждой строке, заканчивающейся ^ M

Как мне заменить его на «нормальный» перевод строки?

Ответы [ 35 ]

551 голосов
/ 01 мая 2009

Команда

:%s/<Ctrl-V><Ctrl-M>/\r/g

Где <Ctrl-V><Ctrl-M> означает тип Ctrl + V , затем Ctrl + M .

Объяснение

:%s

заменитель,% = все строки

<Ctrl-V><Ctrl-M>

^ M символов (Ctrl-V - это способ записи символа Ctrl ^ в Vim, а Ctrl-M записывает M после регулярного выражения, в результате чего получается специальный символ ^ M)

/\r/

с новой строкой (\r)

g

И сделать это глобально (не только первое вхождение в строке).

412 голосов
/ 01 мая 2009

В Linux и Mac OS работает следующее,

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

, где ^V^M означает тип Ctrl + V , затем Ctrl + M .

Примечание: в Windows вы, вероятно, захотите использовать ^Q вместо ^V, поскольку по умолчанию ^V отображается для вставки текста.

182 голосов
/ 01 мая 2009

В пределах vim посмотрите формат файла - DOS или Unix:

:set filetype=unix

:set fileformat=unix

Файл будет записан обратно без символов возврата каретки (CR, ^ M).

112 голосов
/ 02 апреля 2014

Это единственное, что сработало для меня:

: e ++ ff = dos

Нашел по адресу: http://vim.wikia.com/wiki/File_format

104 голосов
/ 27 сентября 2012

Файл, который я создал с помощью BBEdit, показанного в MacVim , отображал кучу ^M возвратов строк вместо обычных. Следующая строка заменяет решенную проблему - надеюсь, это поможет:

:%s/\r/\r/g

Это интересно, потому что я заменяю разрывы строк тем же символом, но я полагаю, что Vim просто нужно, чтобы новый \ r отображался правильно. Мне было бы интересно узнать основную механику того, почему это работает.

34 голосов
/ 07 марта 2012

Во-первых, используйте :set ff?, чтобы выяснить, в каком формате находится ваш файл.

Я думаю, это может быть unix, тогда проблема в том, что ваш файл был создан с fileformat=dos добавлением «^ M ^ J» в конец строки, но считыванием с flieformat=unix только удаление «^ J» из конец строки, оставляя "^ M" там.

Просто введите :e ++ff=dos в командной строке Vim, чтобы изменить формат файла с unix на dos. Это должно решить проблему. Если нет, :%s/\r//g должен помочь вам.

28 голосов
/ 25 апреля 2011

для того, чтобы символ ^ M соответствовал, мне пришлось визуально выбрать его, а затем использовать команду OS copy to clipboard для его получения. Вы можете проверить это, выполнив поиск символа, прежде чем пытаться выполнить команду замены.

/^M

следует выбрать первую плохую строку

:%s/^M/\r/g

заменит все ошибочные ^ M на возврат каретки.

Это как функции в MacVim, который основан на gvim 7.

EDIT:

Снова возникла эта проблема на моем компьютере с Windows 10, на котором установлена ​​Ubuntu для Windows, и я думаю, что это вызывает проблемы с форматированием файлов для vim. В этом случае изменение ff на unix, mac или dos ничего не изменило, кроме как изменить ^ M на ^ J и обратно.

Решение в этом случае:

:%s/\r$/ /g
:%s/ $//g

Причина, по которой я пошел по этому пути, заключается в том, что я хотел убедиться, что у меня нет деструктивного файла. У меня могло бы быть :%s/\r$//g, но это удалило бы возврат каретки прямо, и могло бы иметь неожиданные результаты. Вместо этого мы преобразуем единственный символ CR, здесь символ ^ M, в пробел, а затем удаляем все пробелы в конце строк (что для меня является желательным результатом независимо)

Извините за возрождение старого вопроса, на который давным-давно был дан ответ, но, похоже, в замешательстве возникла некоторая путаница, и я подумал, что помогу кое-что прояснить, так как это происходит в поиске в Google.

22 голосов
/ 10 мая 2014

Ничто из этого не сработало для меня, поэтому я попробовал это, которое сработало:

тип :%s/

нажмите CTRL-V CTRL-M

тип //g

нажмите Введите

Таким образом, общая команда в Vim должна выглядеть так: :%s/^M//g

Что это делает: :%s (найти и заменить) /^M/ (этот символ) / (без символов) g (глобально).

15 голосов
/ 06 октября 2015

Без необходимости использовать Ctrl: :%s/\r$//

12 голосов
/ 07 ноября 2014

Простая вещь, которая работала для меня

dos2unix   filename
...