vim показывает на каждой строке, заканчивающейся ^ M
Как мне заменить это на «нормальный» перенос строки?
vim показывает на каждой строке, заканчивающейся ^ M
Как мне заменить это на «нормальный» перенос строки?
Это единственное, что у меня сработало:
: e ++ ff = dos
Нашел по адресу: http://vim.wikia.com/wiki/File_format
:e ++ff=dos
, за которым следует :set ff=unix
, преобразует окончания в нормальный формат.
- person Mateen Ulhaq; 02.03.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
И делайте это глобально (а не только при первом появлении в очереди).
E486: Pattern not found: <Ctrl-V><Ctrl-M>
- person jumpnett; 27.11.2012
:%s/<Ctrl-V><Ctrl-M>/\r/g
(где \ r заменяет ^ M на новую строку).
- person William Turrell; 03.04.2014
^M
, но нашел ^M$
!?!? пример: :%s/^M$//g
работал у меня
- person roblogic; 15.02.2017
:%s/<Ctrl-V><Ctrl-M>/g
. Также обнаружил, что /g
не нужен (gvim, windows)
- person ZhaoGang; 21.07.2017
:%s/<Ctrl-V><Ctrl-M>//g
- person Sardeep Lakhera; 16.08.2018
:e ++ff=dos
- person Trevor Sullivan; 13.09.2018
В Linux и Mac OS работает следующее:
:%s/^V^M/^V^M/g
где ^V^M
означает тип Ctrl + V, затем Ctrl + M.
Примечание: в Windows вы, вероятно, захотите использовать ^Q
вместо ^V
, поскольку по умолчанию ^V
отображается для вставки текста.
E486: Pattern not found: ^V^M
.
- person jumpnett; 27.11.2012
^M
, но также добавляет дополнительную строку новой строки. Я хочу :%s/^V^M//g
, но это ни здесь, ни там, так как я не задавал вопрос.
- person jumpnett; 28.11.2012
git diff
, но не в Vim из-за преобразования, когда файл открыт. Мне пришлось использовать ответ Джонатана Леффлера в сочетании с вашим и LeopardSkinPillBoxHat для обработки различных файлов. Возможно, мне следовало задать новый вопрос, но в прошлый раз, когда я сделал это для небольшого изменения, мне сказали, что это обман!
- person Leo; 22.03.2013
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
1660 substitutions on 1 line
, и теперь файл содержит 1661 строку. Ура!
- person Kedar Mhaswade; 12.06.2015
%s/\r/\r/g
хорошо работает на MacVim для файла, показывающего только ^M
в конце строк (одна длинная строка в терминах MacVim). Очевидно, что \ r означает разные вещи в шаблоне и заменяемые части этой команды.
- person RichVel; 12.09.2015
В vim
посмотрите на формат файла - DOS или Unix:
:set filetype=unix
:set fileformat=unix
Файл будет записан обратно без символов возврата каретки (CR, ^ M).
set ff=unix
как небольшой ярлык так же, как ft
как ярлык для filetype
- person Posva; 12.08.2015
Файл, который я создал с помощью BBEdit, который был замечен в MacVim, отображал набор ^M
строк, возвращаемых вместо обычных. Следующая замена строки решила проблему - надеюсь, это поможет:
:%s/\r/\r/g
Это интересно, потому что я заменяю разрывы строк одним и тем же символом, но я полагаю, что Vim просто нужно получить свежий \ r для правильного отображения. Мне было бы интересно узнать, почему это работает.
\r
были заменены на \n
, несмотря на указание \r
в качестве замены. Не жалуюсь, это именно то, что я хотел. Просто странно.
- person donut; 02.10.2014
Сначала используйте :set ff?
, чтобы выяснить, в каком формате находится ваш файл.
Я предполагаю, что это может быть unix
, тогда проблема в том, что ваш файл был создан с fileformat=dos
добавлением «^ M ^ J» в конец строки, но читается с flieformat=unix
, удаляя только «^ J» с конца строки, оставляя «^ M» там.
Просто введите :e ++ff=dos
в командной строке Vim, чтобы изменить формат файла с unix на dos. Это должно решить проблему. Если нет, :%s/\r//g
должен вам помочь.
: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.
У меня ничего из этого не сработало, поэтому я попробовал это, и это сработало:
Тип 1_
нажмите CTRL-V CTRL-M
тип //g
нажмите Enter
Итак, общая команда в Vim должна выглядеть как :%s/^M//g
Что это означает: :%s
(найти и заменить) /^M/
(этот символ) /
(без символов) g
(глобально).
^M
, но не заменяет их символами новой строки (vim linux, ff = dos). YMMV в зависимости от того, какой из [mac, windows, linux] у вас установлен и какой формат файла установлен в данный момент (см. С :set ff?
). Вы были на Mac?
- person RGD2; 01.07.2021
^ M извлекается с помощью Ctrl + V и M, так что сделайте
s/^M//g
Без использования Ctrl: :%s/\r$//
E486: Pattern not found: \r$
для этого.
- person RGD2; 01.07.2021
Простая вещь, которая сработала для меня
dos2unix filename
:%s/^M/\r/g
(где ^M
был CTRL-'VM ') работал.
- person RGD2; 01.07.2021
Я сделал это с помощью sed:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'
- ›oven and oven
- person Armand; 29.06.2018
sed
, но не для BSD sed
(как в OSX). Любой, кто исправляет разрывы строк, вероятно, работает с разными операционными системами, поэтому полезно четко понимать, когда ответ сработает.
- person Armand; 05.07.2018
Что насчет только:
:%s/\r//g
Это полностью сработало для меня.
Это просто очищает конец строки от всех строк, удаляет ^ M и все.
На этот вопрос есть много других ответов, но все же для меня лучше всего подходят следующие, поскольку мне требовалось решение для командной строки:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Объяснение:
myfile
:e ++ff=dos
, чтобы принудительно перезагрузить весь файл как окончание строки dos.:w ++ff=unix
, чтобы записать файл, используя окончания строк unixCtrl + M минимизирует мое окно, но Ctrl + Enter фактически вставляет символ ^M
. Я также должен был убедиться, что не нажимаю клавишу Ctrl между нажатиями.
Итак, решение для меня было:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Где <Ctrl-V><Ctrl-Enter>
означает: нажать и удерживать Ctrl, нажать и отпустить V, нажать и отпустить Enter, а затем отпустите Ctrl.
Вышеупомянутое решение добавит дополнительную строку между существующими строками, потому что уже есть невидимый \r
после ^M
.
Чтобы предотвратить это, вы хотите удалить символы ^M
, не заменяя их.
:%s/<Ctrl-V><Ctrl-Enter>//g
Где %
означает «в этом буфере», s
означает «заменить», /
означает «(найти) следующий шаблон», <Ctrl-V><Ctrl-Enter>
относится к клавишам, которые нужно нажать, чтобы получить символ ^M
(см. Выше), //
означает «ни с чем» ( или «с шаблоном между этими двумя косыми чертами, который пуст»), а g
- это флаг, означающий «глобально», в отличие от первого вхождения в строке.
Это сработало для меня:
\n
)Итак, в vim:
:set ff=unix
:w
В моем случае,
Ничего из вышеперечисленного не сработало, у меня был 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,
В качестве альтернативы доступны утилиты с открытым исходным кодом, называемые dos2unix и unix2dos, которые делают именно это. В системе Linux они, вероятно, установлены по умолчанию; для системы Windows вы можете загрузить их, среди прочего, с http://www.bastet.com/.
sed s/^M//g file1.txt > file2.txt
где ^ M набирается одновременным нажатием 3 клавиш, ctrl + v + m
используйте утилиту dos2unix, если файл был создан в Windows, используйте утилиту mac2unix, если файл был создан на Mac. :)
Используйте одну из этих команд:
:%s/\r//g
Or
:%s/\r\(\n\)/\1/g
Чтобы сохранить нажатия клавиш, вы можете не набирать Ctrl + V Ctrl + M по поместив это в отображение. Просто откройте файл, содержащий символ ^ M, выдерните его и вставьте в строку, подобную этой, в вашем .vimrc:
nnoremap <Leader>d :%s/^M//g<CR>
Это сработало для меня:
:% s/\r\n/\r
Ни одно из этих предложений не помогло мне, так как мне удалось получить ^M
разрывы строк при работе как с vim, так и с eclipse. Подозреваю, что столкнулся со сторонним случаем, но на тот случай, если он кому-то поможет.
:%s/.$//g
И это решило мою проблему
:g/^M/s// /g
Если вы наберете ^M
, используя Shift+6 Caps+M
, он не примет.
Вам нужно ввести ctrl+v ctrl+m
.
^M
дает нежелательные разрывы строк. Чтобы справиться с этим, мы можем использовать команду sed
следующим образом:
sed 's/\r//g'
Просто удалитеset binary
из вашего .vimrc!
Чтобы использовать sed
в MacOS, сделайте следующее:
sed -i.bak $'s/\r//' <filename>
Объяснение. Синтаксис $'STRING'
здесь относится к оболочке bash. Компьютеры Mac не рассматривают \r
как специальный символ. Цитируя командную строку в $''
, вы говорите оболочке заменить \r
фактическим символом \r
, указанным в стандарте ANSI-C.
"Эта функция сохраняет список прыжков.
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()
Я провел день, борясь с \ 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)
Магия. Я глубоко благодарен
Или вместо использования vim вы можете просто исправить разрывы строк с помощью этой команды
fromdos <filename.txt>
Надеюсь, это поможет!
У меня ничего из вышеперечисленного не сработало. (замена на \ r, ^ M, ctrl-v-ctrl-m) Я использовал копирование и вставку, чтобы вставить свой текст в новый файл.
Если у вас есть макросы, которые мешают, вы можете попробовать :set paste
перед операцией вставки и :set nopaste
после.
В vim используйте команду:
:%s/\r\n/\r/g
Где вы хотите искать и заменять:
\r\n
в
\r
и
/g
для глобального
Обратите внимание, что это то же самое, что и ответ @ContextSwitch, но с глобальным флагом
На последовательной консоли все решения vi и sed у меня не работали. Мне пришлось:
cat inputfilename | tr -d '\r' > outputfilename
В Solaris:
:% s / ‹CTRL + V› ‹CTRL + M› // g
то есть:
:%s/^M//g
Это означает:
В командном режиме в VIM:
:e ++ff=dos | setl ff=unix | up
e ++ff=dos
- принудительно открыть файл в формате dos
.
setl ff=unix
- конвертировать файл в формат unix
.
up
- сохранять файл только после внесения изменений.
В окнах попробуйте :%s/<C-Q><C-M>/g
<C-v>
заменяется на <C-q>
, потому что по умолчанию первый отображается для вставки текст.
- person Martin Tournoij; 17.01.2017
:%s/<C-Q><C-M>/g
изменит 0d0d0a на 0d0a (0d0a означает \ n \ r). Я не знаю почему, но это действительно работает таким образом (0d0d0a → 0d0a, т.е. ^ M → \ n \ r) в моей ОС Windows7.
- person jiangdongzi; 18.01.2017