vim показывает на каждой строке, заканчивающейся ^ M
Как я могу заменить это на "нормальную" линию?
vim показывает на каждой строке, заканчивающейся ^ M
Как я могу заменить это на "нормальную" линию?
Это единственное, что сработало для меня:
: e ++ ff = dos
Нашел его по адресу: http://vim.wikia.com/wiki/File_format
:%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
И сделайте это глобально (не только первое вхождение на линии).
В Linux и Mac OS следующие работы,
:%s/^V^M/^V^M/g
где ^V^M
означает тип Ctrl + V, тогда Ctrl + M.
Примечание. В Windows вы, вероятно, захотите использовать ^Q
вместо ^V
, так как по умолчанию ^V
отображается для вставки текста.
Внутри vim
просмотрите формат файла - DOS или Unix:
:set filetype=unix
:set fileformat=unix
Файл будет записан обратно без символов возврата каретки (CR, ^ M).
Файл, который я создал с помощью BBEdit, который был замечен в MacVim, отображал кучу строк ^M
вместо обычных. Следующая строка заменяет решенную проблему - надеюсь, это поможет:
:%s/\r/\r/g
Это интересно, потому что я заменяю разрывы строк тем же символом, но я полагаю, что Vim просто нужно, чтобы новый \r отображался правильно. Мне было бы интересно узнать основную механику того, почему это работает.
Сначала используйте :set ff?
, чтобы определить формат файла, в котором находится ваш файл.
Я думаю, это может быть unix
, тогда проблема заключается в том, что ваш файл был создан с помощью fileformat=dos
, добавив "^ M ^ J" к концу строки, но прочитав с помощью flieformat=unix
, удалив только "^ J" из конец линии, оставляя там "^ M".
Просто введите :e ++ff=dos
в командной строке Vim, чтобы изменить формат файла с unix на dos. Он должен решить проблему. Если нет, :%s/\r//g
должен помочь вам.
чтобы совместить символ ^ М, я должен был визуально выбрать его, а затем использовать копию ОС для команды буфера обмена для ее получения. Вы можете протестировать его, выполнив поиск символа перед тем, как попробовать команду 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.
Ни один из них не работал у меня, поэтому я пробовал это, что сработало:
type :%s/
нажмите CTRL-V CTRL-M
type //g
нажмите Enter
Таким образом, общая команда в Vim shoud выглядит как :%s/^M//g
Что это делает: :%s
(найти и заменить) /^M/
(этот символ) /
(без символов) g
(глобально).
Без использования Ctrl: :%s/\r$//
^ M извлекается Ctrl + V и M, поэтому
s/^M//g
Простая вещь, которая сработала для меня
dos2unix filename
Я сделал это с sed:
sed -i -e 's/\r/\n/g' filename
Как насчет:
:%s/\r//g
Это полностью сработало для меня.
Что это значит, просто очистить конец строки всех строк, он удаляет ^ M и что он.
Ctrl + M сводит к минимуму мое окно, но Ctrl + Enter фактически вставляет символ ^M
. Я также должен был не поднимать клавишу Ctrl между прессами.
Итак, решение для меня было:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Где <Ctrl-V><Ctrl-Enter>
означает нажмите и удерживайте Ctrl, нажмите и отпустите V, нажмите и отпустите Enter, , а затем отпустите Ctrl.
Вышеупомянутое решение добавит дополнительную строку между существующими строками, потому что после ^M
уже есть невидимая \r
.
Чтобы предотвратить это, вы хотите удалить символы ^M
, не заменяя их.
:%s/<Ctrl-V><Ctrl-Enter>//g
Где %
означает "в этом буфере", s
означает "подставить", /
означает "(найти) следующий шаблон", <Ctrl-V><Ctrl-Enter>
относится к клавишам для нажатия, чтобы получить ^M
(см. выше), //
означает "без ничего" (или "с шаблоном между этими двумя косой чертой, который пуст" ), а g
- это флаг , означающий "глобально," в отличие от первого вхождения в строку.
Есть много других ответов на этот вопрос, но все же для меня лучше всего подходит, поскольку мне нужно решение командной строки:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Пояснение:
myfile
:e ++ff=dos
, чтобы принудительно перезагрузить весь файл в виде строк dos.:w ++ff=unix
, чтобы записать файл с использованием окончаний строки unix.В моем случае
Ничего выше работало, у меня был 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,
Это сработало для меня:
\n
конец строки)Итак, в vim:
:set ff=unix
:w
Кроме того, существуют утилиты с открытым исходным кодом, называемые dos2unix и unix2dos, которые делают это. В системе Linux они, вероятно, установлены по умолчанию; для системы Windows вы можете скачать их из http://www.bastet.com/ среди других.
sed s/^M//g file1.txt > file2.txt
где ^ M набирается одновременным нажатием 3 клавиш, ctrl + v + m
используйте утилиту dos2unix, если файл был создан в окнах, используйте утилиту mac2unix, если файл был создан на Mac.:)
Это сработало для меня:
:% s/\r\n/\r
Чтобы сохранить нажатия клавиш, вы можете не печатать Ctrl + V Ctrl + M, поместив его в сопоставление. Просто откройте файл, содержащий символ ^ M, задержите его и вставьте в строку, подобную этой в .vimrc:
nnoremap <Leader>d :%s/^M//g<CR>
Ни одно из этих предложений не работало для меня, получив нагрузку на разрывы строк ^M
при работе с vim и eclipse. Я подозреваю, что я столкнулся с внешним случаем, но в случае, если это поможет всем, что я сделал.
:%s/.$//g
И он разобрал мою проблему
:g/^M/s// /g
Если вы наберете ^M
, используя Shift+6 Caps+M
, он не примет.
Вам нужно ввести ctrl+v ctrl+m
.
Я знаю, что это может быть слишком старым, но надеюсь, что кто-то найдет это полезным.
Использовать следующие команды:
:%s/\r//g
или
:%s/\r\(\n\)/\1/g
^M
дает нежелательные разрывы строк. Чтобы справиться с этим, мы можем использовать команду sed
следующим образом:
sed 's/\r//g'
Просто удалите set binary
в вашем .vimrc!
"Эта функция сохраняет список переходов
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()
Я провел день, борясь с \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)
Магия. Я глубоко благодарен
Или вместо использования vim вы можете просто исправить разрывы строк, используя эту команду
fromdos <filename.txt>
Надеюсь, что это поможет!