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

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

Как я могу заменить это на "нормальную" линию?

Ответ 2

Команда

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

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

Объяснение

:%s

substitute,% = все строки

<Ctrl-V><Ctrl-M>

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

/\r/

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

g

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

Ответ 3

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

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

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

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

Ответ 4

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

:set filetype=unix

:set fileformat=unix

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

Ответ 5

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

:%s/\r/\r/g

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

Ответ 6

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

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

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

Ответ 7

чтобы совместить символ ^ М, я должен был визуально выбрать его, а затем использовать копию ОС для команды буфера обмена для ее получения. Вы можете протестировать его, выполнив поиск символа перед тем, как попробовать команду replace.

/^M

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

:%s/^M/\r/g

заменит все errant ^ 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.

Ответ 8

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

type :%s/

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

type //g

нажмите Enter

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

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

Ответ 9

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

Ответ 10

^ M извлекается Ctrl + V и M, поэтому

s/^M//g

Ответ 11

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

dos2unix   filename

Ответ 12

Я сделал это с sed:

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

Ответ 13

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

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

Ответ 14

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

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

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

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

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

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

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

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

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

Ответ 15

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

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

Ответ 16

В моем случае

Ничего выше работало, у меня был 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,

Ответ 17

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

  • Установить формат файла для unix (\n конец строки)
  • сохранить файл

Итак, в vim:

:set ff=unix
:w

Ответ 18

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

Ответ 19

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

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

Ответ 20

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

Ответ 21

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

:% s/\r\n/\r

Ответ 22

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

nnoremap <Leader>d :%s/^M//g<CR>

Ответ 23

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

:%s/.$//g

И он разобрал мою проблему

Ответ 24

:g/^M/s// /g

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

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

Ответ 25

Я знаю, что это может быть слишком старым, но надеюсь, что кто-то найдет это полезным.

Использовать следующие команды:

:%s/\r//g

или

:%s/\r\(\n\)/\1/g

Ответ 26

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

sed 's/\r//g'

Ответ 27

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

Ответ 28

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

fun! Dos2unixFunction()
let [email protected]/
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()

Ответ 29

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

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

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

оказалось что-то вроде этого:

blacklist-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)

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

Ответ 30

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

fromdos <filename.txt>

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