Как преобразовать разрыв строки ^ M в «нормальный» разрыв строки в файле, открытом в vim?

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

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


person ByteNirvana    schedule 01.05.2009    source источник
comment
возможный дубликат Конвертировать окончания строк DOS в окончания строк Linux в vim   -  person cfi    schedule 11.09.2015
comment
Измените решение на изменение формата файла, потому что это наиболее чистое решение.   -  person erikbwork    schedule 13.10.2016
comment
Я знаю, что этот вопрос касается vim, но некоторые другие поисковые запросы Google также попадают в эту ветку. Итак, если в вашей системе установлен Eclipse, вы можете преобразовать разделитель строк для одного файла или всего дерева папок с файлами несколькими щелчками мыши: stackoverflow.com/a/7019737/1364747   -  person Teddy    schedule 04.07.2017
comment
Мне нравится, как вы называете нормальный разрыв строки нормальным - в отличие от тех разрывов строки ^ M :-)   -  person DerMike    schedule 06.05.2020


Ответы (37)


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

: e ++ ff = dos

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

person Pam    schedule 02.04.2014
comment
Работал на windows7 Vim7.4 - person schuess; 09.11.2015
comment
:e ++ff=dos, за которым следует :set ff=unix, преобразует окончания в нормальный формат. - person Mateen Ulhaq; 02.03.2018
comment
Ответ решения у меня не сработал, мне помогли только команды @MateenUlhaq. - person Edenshaw; 26.07.2018

Командование

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

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

Объяснение

:%s

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

<Ctrl-V><Ctrl-M>

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

/\r/

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

g

И делайте это глобально (а не только при первом появлении в очереди).

person LeopardSkinPillBoxHat    schedule 01.05.2009
comment
@luckytaxi - чем он вам полезен? - person LeopardSkinPillBoxHat; 22.07.2010
comment
он удалил символы ^ M, но не вставил возврат каретки. - person sdot257; 23.07.2010
comment
Это не работает, по крайней мере, на Ubuntu. Я получаю сообщение об ошибке E486: Pattern not found: <Ctrl-V><Ctrl-M> - person jumpnett; 27.11.2012
comment
На самом деле я набрал строку «‹Ctrl-V› ‹Ctrl-M›». Вы имели в виду введите ‹kbd› Ctrl ‹/kbd› + ‹kbd› V ‹/kbd›, затем ‹kbd› Ctrl ‹/kbd› + ‹kbd› M ‹/kbd›? - person jumpnett; 28.11.2012
comment
@jumpnett - Вам нужно нажимать сочетания клавиш Ctrl-V / Ctrl-M, а не вводить это как дословный текст. - person LeopardSkinPillBoxHat; 28.11.2012
comment
Это было правильное решение, когда у меня возникла эта проблема. Однако это не так просто. Это работает, если файл имеет окончания CRLF, тогда как подход:% s / ^ V ^ M / ^ V ^ M / g работает при преобразовании из одного в другой. Настройки при открытии файла и при его обновлении Git в фоновом режиме могут повлиять на это, потому что Vim может угадать режим при открытии файла, но будет читать все, если файл изменяется во время открытия. . - person Leo; 21.03.2013
comment
не получилось, теперь у меня однострочный файл - person ppostma1; 20.05.2013
comment
У меня работает в ArchLinux :-), Vim 7.3 - person Soundararajan; 03.10.2013
comment
Это определенно правильный ответ на вопрос, если у вас есть ^ M, за которым следует новая строка, вы хотите сохранить новую строку, но удалить ^ M. Выполните другую замену, указанную ниже, в файле с двойным пробелом. - person dlamblin; 16.10.2013
comment
Если вам по-прежнему не хватает возврата каретки (т.е. ^ M был удален, но все заключено в одну строку), выполните: :%s/<Ctrl-V><Ctrl-M>/\r/g (где \ r заменяет ^ M на новую строку). - person William Turrell; 03.04.2014
comment
Если вы используете Vim в Windows, вам нужно использовать ‹Ctrl-Q› вместо ‹Ctrl-V›. - person GrandAdmiral; 26.06.2014
comment
Для меня использование решения MacVim @ netpoetica, расположенного ниже, было единственным, которое здесь сработало. - person b_dev; 07.07.2014
comment
OP сказал заменить, а не удалить. - person ; 12.08.2014
comment
Убедитесь, что вы действительно нажимаете Ctrl-V и Ctrl-M, а не просто копируете и вставляете строку. - person dps; 19.12.2015
comment
Я всегда забываю, как это делать, и всегда возвращаюсь к этому вопросу, когда иду искать. Спасибо в 18-й раз. - person jgitter; 16.02.2016
comment
Этот ответ должен быть моей домашней страницей - person Reza S; 12.07.2016
comment
При работе с текстовым файлом, который был искажен Windows, мне нужно было только заменить ^ M на (пустую строку). - person HoldOffHunger; 18.10.2016
comment
В дополнение к @GrandAdmiral: GVim в Windows не смог найти ^M, но нашел ^M$!?!? пример: :%s/^M$//g работал у меня - person roblogic; 15.02.2017
comment
если вы хотите удалить только ^ M: :%s/<Ctrl-V><Ctrl-M>/g. Также обнаружил, что /g не нужен (gvim, windows) - person ZhaoGang; 21.07.2017
comment
Обратите внимание, что это не работает, если файл загружен как файл dos. - person M.D.; 30.10.2017
comment
только это сработало для меня. Если вам не нужна новая строка, не добавляйте \ r. :%s/<Ctrl-V><Ctrl-M>//g - person Sardeep Lakhera; 16.08.2018
comment
Этот ответ добавил в мой файл дополнительные разрывы строк ... принятый ответ работал нормально. :e ++ff=dos - person Trevor Sullivan; 13.09.2018
comment
На Mac с iTerm2 действительно нужно использовать клавишу «control», а не «команду». - person robsch; 26.01.2021

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

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

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

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

person Paul Tomblin    schedule 01.05.2009
comment
Почему это получило отрицательный голос? Это работает, даже если ваш файл растянут на одну строку из-за неправильного конца строки. - person Paul Tomblin; 01.05.2009
comment
Это действительно работает, и это именно то, что вам нужно, когда весь текст находится в одной строке. - person Bart Schuller; 01.05.2009
comment
Разве% s / ^ V ^ M / ^ V ^ M / g не должно быть% s / ^ V ^ M // g? - person Adnan; 01.05.2009
comment
Нет. Мой способ заменяет то, что является концом строки в файле, правильным концом строки. - person Paul Tomblin; 01.05.2009
comment
Это не работает, по крайней мере, на Ubuntu. Я получаю сообщение об ошибке E486: Pattern not found: ^V^M. - person jumpnett; 27.11.2012
comment
@jumpnett, вы неправильно набрали. двоеточие, затем процент, затем s, затем косая черта, затем контроль v, затем контроль m, затем косая черта, затем контроль v, затем контроль m, затем косая черта, затем g, затем возврат. - person Paul Tomblin; 28.11.2012
comment
Я не правильно набрал. Он заменяет ^M, но также добавляет дополнительную строку новой строки. Я хочу :%s/^V^M//g, но это ни здесь, ни там, так как я не задавал вопрос. - person jumpnett; 28.11.2012
comment
Это правильное решение, если в вашем файле вообще нет новых строк (т.е. это одна длинная строка). Если в вашем файле есть окончания строки и символ ^ M, тогда между каждой строкой будет добавлен дополнительный разрыв строки. - person Leo; 21.03.2013
comment
@Leo, вопрос конкретно просит преобразовать ^ M в разрыв строки, что и делает мой ответ (в отличие от принятого ответа, который удаляет ^ M). - person Paul Tomblin; 21.03.2013
comment
@PaulTomblin Да, вы совершенно правы. Извинения. Проблема, с которой я столкнулся, была немного другой - ^ M появлялся в git diff, но не в Vim из-за преобразования, когда файл открыт. Мне пришлось использовать ответ Джонатана Леффлера в сочетании с вашим и LeopardSkinPillBoxHat для обработки различных файлов. Возможно, мне следовало задать новый вопрос, но в прошлый раз, когда я сделал это для небольшого изменения, мне сказали, что это обман! - person Leo; 22.03.2013
comment
@PaulTomblin - ваш ответ работает для одной длинной строки с ^ M в нем. Если есть много строк, каждая из которых заканчивается на ^ M, то принятый ответ работает, поскольку на самом деле это пары возврата каретки / перевода строки. - person LavaSlider; 03.09.2013
comment
@LavaSlider, по моему опыту, он работает для любого файла с любым количеством строк. - person Paul Tomblin; 03.09.2013
comment
Но если строка заканчивается ‹CR› ‹LF›,:% s / ^ V ^ M / ^ V ^ M / g изменит ее на ‹LF› ‹LF›, вставив пустую строку. Возможно, это разные версии vim, но я набрал: привет ^ V ^ Mhow ^ V ^ Mare ^ V ^ Myou ^ V ^ M [return] привет ^ V ^ M [return] как ^ V ^ M [return] ^ V ^ M [return] you ^ V ^ M [esc] (где [return] нажимает клавишу возврата / ввода, а [esc] - клавиша выхода). Перед выполнением команды файл состоит из 5 строк, первая с hello ^ Mhow ^ Mare ^ Myou ^ M, следующие четыре с одним словом, за которым следует ^ M. После:% s / ^ V ^ M / ^ V ^ M / g есть 13 строк, по 1 слову в строке, кроме пустых строк в строках 5,7,9,11 и 13 (на Mac). Попытайся. - person LavaSlider; 04.09.2013
comment
У меня нет опыта с реальными файлами, перемещенными из Windows в Linux или из Windows в Mac. - person Paul Tomblin; 04.09.2013
comment
Это работает для меня, файлы из окон, редактируемые на osx, вопрос в том, почему это работает, это немного странно, не правда ли, заменяя той же последовательностью символов. - person O.O; 07.10.2013
comment
Это для другой проблемы, когда в вашем файле НЕТ новых строк, что, я признаю, встречается чаще. FYI ^ M может соответствовать \ r - person dlamblin; 16.10.2013
comment
Это глубоко загадочная команда, но она работает у меня на Mac. - person Eric Walker; 19.12.2013
comment
действительно глубоко таинственный и работает для меня на всех серверах, на которых я пробовал его, от redhat до ubuntu и os x. - person billynoah; 04.12.2014
comment
Ага! Также работает на cygwin. У меня был файл, созданный на Ubuntu / scp'ed на Windows / открытый с помощью vim под Cygwin. В нем была одна длинная линия с 1660 мкМ. Выполнение этой команды дало: 1660 substitutions on 1 line, и теперь файл содержит 1661 строку. Ура! - person Kedar Mhaswade; 12.06.2015
comment
Это правильный ответ, а не тот, который был принят. - person Ashesh; 20.07.2015
comment
Я обнаружил, что эквивалент %s/\r/\r/g хорошо работает на MacVim для файла, показывающего только ^M в конце строк (одна длинная строка в терминах MacVim). Очевидно, что \ r означает разные вещи в шаблоне и заменяемые части этой команды. - person RichVel; 12.09.2015
comment
Это работает как шарм! на OSX + vim. :) Большое спасибо. Очень неприятно иметь в файле ^ M. - person Death Metal; 01.09.2016
comment
Ваш совет по использованию ^ Q в Windows должен получить дополнительно +1000 баллов! Спасибо. - person Sabuncu; 12.03.2017
comment
У меня это не сработало, но комментарий RichVel% s / \ r / \ r / g работал у меня. Хотелось бы увидеть ответ, который объясняет, почему этот ответ не сработал, но \ r работает (и другие решения, которые люди ставят). Есть много разных решений этой проблемы, и не понимая, что происходит, решает попробовать все, пока что-то не сработает. - person lcjury; 30.05.2018

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

:set filetype=unix

:set fileformat=unix

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

person Jonathan Leffler    schedule 01.05.2009
comment
использование: set fileformat = unix Для большинства конфигураций filetype изменяет только используемый тип синтаксиса. - person derGral; 21.06.2011
comment
Это исправило мою ошибку ... Vim начал думать, что мой файл в формате UNIX - это окна, а недавно измененные строки отображали ^ M в git diff. - person Thomas Hunter II; 23.03.2012
comment
Должен зависеть от системы. Сегодня этот сработал. Команда set выполняется в vim, кстати. - person gbarry; 28.11.2012
comment
Я обнаружил небольшую ошибку: если Git обновляет файл в фоновом режиме (из-за проверки), и вы установили для него что-то иное, чем то, что Vim предположил при открытии файла, Vim, похоже, не переконвертируется при перезагрузке буфера. Вы получите кучу посторонних персонажей. Затем вы можете использовать один из подходов% s / ^ V ^ M /.../ g, описанных выше. Какой именно зависит от того, в какие форматы вы конвертируете и из каких. - person Leo; 21.03.2013
comment
отлично! потому что формат файла - dos, установите его на unix, и все в порядке - person zhaozhi; 14.01.2014
comment
Это также работает с vi, кстати, и вы можете использовать set ff=unix как небольшой ярлык так же, как ft как ярлык для filetype - person Posva; 12.08.2015
comment
@Posva: Спасибо за сокращения! - person Jonathan Leffler; 12.08.2015
comment
Мне нравится это решение, потому что мне не нужно делать то, что я делал раньше (а) оставить vi, (б) vi -b ‹filename›, (c): s / ^ M //. Спасибо. - person Jeff Holt; 01.03.2017

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

:%s/\r/\r/g

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

person netpoetica    schedule 27.09.2012
comment
Функции поиска имеют тенденцию принимать более широкие правила распознавания последовательностей конца строки. Но \ r имеет особое значение, когда записывается как данные. - person gbarry; 28.11.2012
comment
Это сработало для меня в Windows gVim, чтобы отсортировать файл, в котором не было разрывов строк, а вместо этого было много ^ M. - person flash; 31.01.2014
comment
Из всех решений, предлагаемых на этой странице, это был единственный шаблон, который помог мне удалить ^ M из файла csv. Используя MacVim. - person B6431; 21.05.2014
comment
+1 Работал и у меня, пока SSHing на Ubuntu Trusty из Windows с помощью Mobaterm - person Carl; 26.06.2014
comment
Таким образом, похоже, что все символы \r были заменены на \n, несмотря на указание \r в качестве замены. Не жалуюсь, это именно то, что я хотел. Просто странно. - person donut; 02.10.2014
comment
Этот ответ прояснил для меня, почему шаблоны поиска и замены одинаковы. Я бы подумал, что это не имеет никакого эффекта, но они интерпретируются по-разному в каждом контексте - я еще не видел, чтобы это упоминалось. Короткий ответ, похоже, \ n уже был занят. - person dcc310; 21.12.2016

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

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

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

person chenxsan    schedule 07.03.2012
comment
Я должен был сделать и то, и другое. :e ++ff=dos, затем :set ff=unix и :w - person Max; 11.10.2016

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

/^M

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

:%s/^M/\r/g

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

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

ИЗМЕНИТЬ:

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

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

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

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

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

person Metagrapher    schedule 25.04.2011
comment
нажатие ctrl-v ctrl-m также может работать для вставки символа, fwiw. но \ r вставляет правильный возврат каретки. - person Metagrapher; 26.11.2011
comment
Это ПРАВИЛЬНЫЙ ответ. Как сказано выше, используйте ‹ctrl-v› ‹ctrl-m›, чтобы вставить буквальный ^ M в команду. - person carlosayam; 17.12.2012
comment
Я согласен, хотя уверен, что если бы это сработало для меня во время исходной публикации, я бы не опубликовал ее. ;) - person Metagrapher; 19.12.2012

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

Тип 1_

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

тип //g

нажмите Enter

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

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

person d-_-b    schedule 10.05.2014
comment
Взрыв !! Работает на Mac. - person shamail; 10.10.2017
comment
Хороший ответ. Просто убивает ^M, но не заменяет их символами новой строки (vim linux, ff = dos). YMMV в зависимости от того, какой из [mac, windows, linux] у вас установлен и какой формат файла установлен в данный момент (см. С :set ff?). Вы были на Mac? - person RGD2; 01.07.2021

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

s/^M//g
person Andrew Sledge    schedule 01.05.2009

Без использования Ctrl: :%s/\r$//

person BHarman    schedule 06.10.2015
comment
Я тоже так делаю. Я просто никогда не помню команду - person pixel 67; 02.11.2016
comment
Это рекомендуемый способ удалить эти окончания. - person Metagrapher; 11.09.2017
comment
Это отлично сработало и в моем случае. - person Enis Arik; 01.02.2021
comment
Vim 8.1 дает мне E486: Pattern not found: \r$ для этого. - person RGD2; 01.07.2021

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

dos2unix   filename
person Shahzeb Khan    schedule 07.11.2014
comment
Это просто удалило символы ^ M, а не заменило их символами новой строки. - person carlin.scott; 18.01.2021
comment
это не помогло мне обоим. :%s/^M/\r/g (где ^M был CTRL-'VM ') работал. - person RGD2; 01.07.2021

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

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

person Freedom_Ben    schedule 03.01.2015
comment
Вы уверены, что это работает? В OSX: sed -e 's/\r/\n/g' <<< 'over and over' - ›oven and oven - person Armand; 29.06.2018
comment
Да, это работает (я часто им пользуюсь), но в OSX, если у вас не установлена ​​GNU-версия sed, она может не работать. Версия sed, которую Apple поставляет по умолчанию, сильно отличается (к сожалению) от версии GNU, которая поставляется во всех дистрибутивах Linux. Чтобы получить дополнительную помощь, прочтите ответ на этот вопрос: stackoverflow.com/q/30003570/2062384 - person Freedom_Ben; 29.06.2018
comment
Спасибо @Freedom_Ben. Похоже, это работает для GNU sed, но не для BSD sed (как в OSX). Любой, кто исправляет разрывы строк, вероятно, работает с разными операционными системами, поэтому полезно четко понимать, когда ответ сработает. - person Armand; 05.07.2018

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

Это просто очищает конец строки от всех строк, удаляет ^ M и все.

person Tonatiuh    schedule 11.07.2014

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

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
person Micah Smith    schedule 22.04.2017
comment
благодарю вас! это устранило мою проблему и было полезно использовать в сценариях - person Peddipaga; 08.06.2017

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

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

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

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

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

Вышеупомянутое решение добавит дополнительную строку между существующими строками, потому что уже есть невидимый \r после ^M.

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

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

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

person CrannDarach    schedule 04.04.2017

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

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

Итак, в vim:

:set ff=unix
:w
person Stryker    schedule 30.11.2016
comment
Этот сработал для меня, а принятый ответ - нет. - person Marcello Romani; 28.03.2017

В моем случае,

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

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,
person Vishwanath gowda k    schedule 04.12.2016

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

person ConcernedOfTunbridgeWells    schedule 01.05.2009

sed s/^M//g file1.txt > file2.txt

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

person Blue Diamond    schedule 04.08.2014

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

person Ramesh    schedule 25.09.2012
comment
никогда раньше не слышал о mac2unix, я бы проголосовал снова, если бы мог! - person Kuf; 24.08.2016
comment
Ура! это путь! - person Private; 12.09.2016

Используйте одну из этих команд:

:%s/\r//g

Or

:%s/\r\(\n\)/\1/g
person Muhammad Reda    schedule 10.06.2015

Чтобы сохранить нажатия клавиш, вы можете не набирать Ctrl + V Ctrl + M по поместив это в отображение. Просто откройте файл, содержащий символ ^ M, выдерните его и вставьте в строку, подобную этой, в вашем .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>
person agouge    schedule 06.12.2013

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

:% s/\r\n/\r
person ContextSwitch    schedule 18.04.2014

Ни одно из этих предложений не помогло мне, так как мне удалось получить ^M разрывы строк при работе как с vim, так и с eclipse. Подозреваю, что столкнулся со сторонним случаем, но на тот случай, если он кому-то поможет.

:%s/.$//g

И это решило мою проблему

person rogermushroom    schedule 03.04.2014
comment
Это удалит ЛЮБОЙ символ в конце строки. Если у вас есть строка, которая по какой-то причине не заканчивается символом ^ M, вы также удалите этот символ, что будет неожиданным. Это не должно быть так, но в том случае, если это так, и вы этого не знаете, вы можете испортить свой файл очень трудно идентифицировать способом. - person Metagrapher; 11.09.2017

:g/^M/s// /g

Если вы наберете ^M, используя Shift+6 Caps+M, он не примет.

Вам нужно ввести ctrl+v ctrl+m.

person Shravan Kumar    schedule 30.04.2015

^M дает нежелательные разрывы строк. Чтобы справиться с этим, мы можем использовать команду sed следующим образом:

sed 's/\r//g'
person Manoj Kumar    schedule 20.07.2016
comment
idk, почему это было понижено до -1 ... потому что он использует sed? вы можете сделать ту же замену внутри vim, и она должна работать - person Metagrapher; 11.09.2017

Просто удалитеset binary из вашего .vimrc!

person falcucci    schedule 26.05.2017
comment
В одном другом потоке рекомендуется установить двоичный файл, чтобы избавиться от автоматической вставки новой строки. - person dexter2305; 30.06.2017

Чтобы использовать sed в MacOS, сделайте следующее:

sed -i.bak $'s/\r//' <filename>

Объяснение. Синтаксис $'STRING' здесь относится к оболочке bash. Компьютеры Mac не рассматривают \r как специальный символ. Цитируя командную строку в $'', вы говорите оболочке заменить \r фактическим символом \r, указанным в стандарте ANSI-C.

person Nitin Nain    schedule 22.01.2019

"Эта функция сохраняет список прыжков.

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
person SergioAraujo    schedule 25.04.2011
comment
В этом случае, что не так с использованием собственной команды dos2unix * NIX? linux.die.net/man/1/dos2unix - person Metagrapher; 18.05.2011

Я провел день, борясь с \ n ctrl-v 012 (оба из которых предоставляют мне значение null). & работал над этой веткой, пока не добрался до метаграфа.

\r у меня отлично сработало!

/),/s/),/)\r/g

получилось примерно так:

черный список-extra: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,

примерно так:

26 libwv-1.2-4: i386 (1.2.9-3, автоматически)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, автоматически)
28 jed: i386 (0.99 .19-2.1)

Магия. Я глубоко благодарен

person user1997684    schedule 21.01.2013

Или вместо использования vim вы можете просто исправить разрывы строк с помощью этой команды

fromdos <filename.txt>

Надеюсь, это поможет!

person bsmoo    schedule 17.03.2013

У меня ничего из вышеперечисленного не сработало. (замена на \ r, ^ M, ctrl-v-ctrl-m) Я использовал копирование и вставку, чтобы вставить свой текст в новый файл.

Если у вас есть макросы, которые мешают, вы можете попробовать :set paste перед операцией вставки и :set nopaste после.

person statueofmike    schedule 28.07.2014

В vim используйте команду:

:%s/\r\n/\r/g

Где вы хотите искать и заменять:

\r\n

в

\r

и

/g

для глобального

Обратите внимание, что это то же самое, что и ответ @ContextSwitch, но с глобальным флагом

person markyk    schedule 14.08.2015

На последовательной консоли все решения vi и sed у меня не работали. Мне пришлось:

cat inputfilename | tr -d '\r' > outputfilename
person robsn    schedule 16.11.2016

В Solaris:

:% s / ‹CTRL + V› ‹CTRL + M› // g

то есть:

:%s/^M//g

Это означает:

  • % = все строки,
  • s = заменить,
  • ^ M = то, что вы хотите заменить
  • // = заменить ничем
  • g = глобально (не только первое появление)
person Donato Pirozzi    schedule 02.12.2020

В командном режиме в VIM:

:e ++ff=dos | setl ff=unix | up

e ++ff=dos - принудительно открыть файл в формате dos.

setl ff=unix - конвертировать файл в формат unix.

up - сохранять файл только после внесения изменений.

person Victor S.    schedule 03.12.2020

В окнах попробуйте :%s/<C-Q><C-M>/g

person jiangdongzi    schedule 17.01.2017
comment
Не могли бы вы пояснить, почему это работает, т.е. что вы на самом деле делаете с различными частями этой команды? - person LordWilmore; 17.01.2017
comment
Это то же самое, что и верхний ответ, за исключением того, что <C-v> заменяется на <C-q>, потому что по умолчанию первый отображается для вставки текст. - person Martin Tournoij; 17.01.2017
comment
^ M означает 0d0d0a, :%s/<C-Q><C-M>/g изменит 0d0d0a на 0d0a (0d0a означает \ n \ r). Я не знаю почему, но это действительно работает таким образом (0d0d0a → 0d0a, т.е. ^ M → \ n \ r) в моей ОС Windows7. - person jiangdongzi; 18.01.2017