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)
Магія. Я щиро вдячний