vim показує на кожному рядку, що закінчується ^ M
Як я можу замінити це на "звичайний" рядок?
vim показує на кожному рядку, що закінчується ^ M
Як я можу замінити це на "звичайний" рядок?
Відповіді:
Це єдине, що працювало для мене:
: e ++ ff = dos
Знайдено за адресою: http://vim.wikia.com/wiki/File_format
:e ++ff=dosДалі :set ff=unixбуде перетворено закінчення у здоровий формат.
:%s/<Ctrl-V><Ctrl-M>/\r/g
Де <Ctrl-V><Ctrl-M>означає тип Ctrl+, Vто Ctrl+ M.
:%s
заміна,% = всі рядки
<Ctrl-V><Ctrl-M>
^ М символів (Ctrl-V - це Vim спосіб запису символу Ctrl ^, а Ctrl-M пише M після регулярного виразу, в результаті чого ^ M спеціальний символ)
/\r/
з новим рядком ( \r)
g
І робити це у всьому світі (не лише перше явище на лінії).
:%s/<Ctrl-V><Ctrl-M>/\r/g(де \ M замінює ^ M на новий рядок).
У Linux та Mac OS працює наступне,
:%s/^V^M/^V^M/g
де ^V^Mозначає тип Ctrl+ V, то Ctrl+ M.
Примітка. У Windows, можливо, ви хочете використовувати ^Qзамість цього ^V, оскільки за замовчуванням ^Vвідображається вставка тексту.
%s/\r/\r/gдобре працював на MacVim для файлу, що відображається лише ^Mв кінці рядків (один довгий рядок в умовах MacVim). Ясно означає, що в шаблоні та замінниках частини цієї команди різні речі.
Всередині vimподивіться формат файлу - DOS або Unix:
:set filetype=unix
:set fileformat=unix
Файл буде записаний назад без символів повернення каретки (CR, ^ M).
set ff=unixяк невеликий ярлик таким же чином, ftяк це ярликfiletype
Файл, який я створив за допомогою BBEdit, який бачив у MacVim, відображав купу ^Mповернень рядків замість звичайних. Наступна заміна рядка вирішила проблему - сподіваємось, це допоможе:
:%s/\r/\r/g
Це цікаво, тому що я замінюю перерви рядків тим самим символом, але, мабуть, Vim просто повинен отримати свіжий \ n для коректного відображення. Мені буде цікаво знати основні механізми, чому це працює.
\rсимволів, \nнезважаючи на те, що вони вказали \rяк заміну. Не нарікаючи, це саме те, що я хотів. Просто дивно.
По-перше, використовуйте, :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
щоб зрівняти символ ^ M, мені довелося візуально його вибрати, а потім скопіювати команду ОС копію в буфер обміну, щоб отримати його. Ви можете перевірити його, здійснивши пошук символу, перш ніж спробувати команду заміну.
/^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, тут ^ М символ, у пробіл, а потім видаляємо всі пробіли в кінці рядків (що для мене є бажаним результатом незалежно)
Вибачте за те, що я відновив старе питання, на яке вже давно відповіли, але, здавалося, виникає деяка плутанина, і я подумав, що допоможу очистити щось із цього питання, оскільки це дуже високий рівень пошуку Google.
Жодне з них не працювало для мене, тому я спробував це, що спрацювало:
тип :%s/
натиснути CTRL-VCTRL-M
тип //g
натиснути Enter
Таким чином, загальна команда у Vim повинна виглядати :%s/^M//g
Що це робить: :%s(знайти та замінити) /^M/(цей символ) /(без символів) g(у всьому світі).
^ M отримується за допомогою Ctrl+ Vі M, так само
s/^M//g
Без потреби використовувати Ctrl:
:%s/\r$//
Проста річ, яка працювала на мене
dos2unix filename
Я зробив це з sed:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'->oven and oven
sedале не BSD sed(як це знайдено в OSX). Будь-який фіксуючий рядковий перелом, ймовірно, працює із сумішшю операційних систем, тому корисно бути зрозумілим, коли відповідь спрацює.
Що тільки про:
:%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
У мене був файл, в якому ^ М символів були прокладені між рядками чимось на зразок нижче
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
Скористайтеся однією з таких команд:
:%s/\r//g
Або
:%s/\r\(\n\)/\1/g
Це працювало для мене:
:% 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' синтаксис тут відноситься до Баш оболонки. Маки не трактуються \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
вийшло щось подібне:
чорний список-додатковий: 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), лібсан-звичайний: 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)
Магія. Я щиро вдячний