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

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

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

Ответы [ 35 ]

12 голосов
/ 03 января 2015

Я сделал это с помощью sed:

sed -i -e 's/\r/\n/g' filename

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

^ M извлекается с помощью Ctrl + V и M , как и

s/^M//g
9 голосов
/ 11 июля 2014

Как насчет просто: :%s/\r//g Это полностью сработало для меня.

Для этого нужно просто очистить конец строки всех строк, удалить ^ M и все.

8 голосов
/ 04 апреля 2017

Ctrl + M сворачивает мое окно, но Ctrl + Ввод фактически вставляет символ ^M. Я также должен был быть уверен, чтобы не нажимать клавишу Ctrl между нажатиями.

Так что решение для меня было:

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

Где <Ctrl-V><Ctrl-Enter> означает , нажмите и удерживайте Ctrl , нажмите и отпустите V , нажмите и отпустите Введите , и затем отпустите Ctrl .

Если вы работаете над сгенерированным Windows файлом

Приведенное выше решение добавит дополнительную строку между существующими строками, поскольку после ^M.

уже есть невидимый \r.

Чтобы предотвратить это, вы хотите удалить символы ^M без их замены.

:%s/<Ctrl-V><Ctrl-Enter>//g

Где % означает «в этом буфере», s означает «заменить», / означает «(найти) следующий шаблон», <Ctrl-V><Ctrl-Enter> относится к клавишам, которые нужно нажать, чтобы получить ^M символ (см. выше), // означает «ни с чем» (или «с шаблоном между этими двумя косыми чертами, который является пустым»), а g является флагом , означающим «глобально» в отличие от первого вхождения в строке.

8 голосов
/ 22 апреля 2017

Есть много других ответов на этот вопрос, но, тем не менее, мне лучше всего подходит следующее, так как мне нужно было решение для командной строки:

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

Пояснение:

  • Без загрузки каких-либо файлов .vimrc, откройте myfile
  • Запустите :e ++ff=dos, чтобы принудительно перезагрузить весь файл как конец строки DOS.
  • Запустите :w ++ff=unix, чтобы записать файл с использованием окончаний строки Unix
  • Выйти из Vim
7 голосов
/ 30 ноября 2016

Это сработало для меня:

  1. Установить формат файла в unix (\n конец строки)
  2. сохранить файл

Итак, в vim:

:set ff=unix
:w
7 голосов
/ 04 декабря 2016

В моем случае

Ничто из вышеперечисленного не сработало, у меня с компьютера Mac был скопирован файл CSV на компьютер Linux, и я использовал все вышеперечисленные команды, но ничего не помогло, кроме приведенной ниже

tr "\015" "\n" < inputfile > outputfile

У меня был файл, в котором символы ^ M были переключены между строками примерно так, как показано ниже

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
5 голосов
/ 01 мая 2009

В качестве альтернативы, есть утилиты с открытым исходным кодом, называемые dos2unix и unix2dos, которые делают именно это. В системе Linux они, вероятно, установлены по умолчанию; для системы Windows вы можете загрузить их с http://www.bastet.com/ среди других.

5 голосов
/ 04 августа 2014
sed s/^M//g file1.txt > file2.txt

где ^ M набирается одновременным нажатием 3 клавиш, ctrl + v + m

4 голосов
/ 25 сентября 2012

используйте утилиту dos2unix, если файл был создан в Windows, используйте утилиту mac2unix, если файл был создан на Mac. :)

...