vim prezinta pe fiecare linie se termină ^M
Cum fac să le înlocuiască cu un 'normal' linebreak?
:%s/<Ctrl-V><Ctrl-M>/\r/g
Unde <Ctrl-V><Ctrl-M>
înseamnă de tip Ctrl+V apoi Ctrl+M.
:%s
substitut, % = toate liniile
<Ctrl-V><Ctrl-M>
^M caractere (Ctrl-V este un Vim mod de a scrie Ctrl ^ caracterul și Ctrl-M scrie M, după expresia regulată, ducând la ^M caractere speciale)
/\r/
cu noua linie (\r
)
g
Și face la nivel global (nu doar prima apariție pe linie).
Pe Linux și Mac OS, următoarele lucrări,
:%s/^V^M/^V^M/g
unde ^V^M
înseamnă de tip Ctrl+V, apoi Ctrl+M.
Notă: pe Windows probabil că doriți să utilizați ^Q "în loc de" ^V
, deoarece în mod implicit ^V
este mapat pentru a lipi textul.
Un fișier care am creat-o cu BBEdit văzut în MacVim a fost afișând o grămadă de ^M
linie de returnare în loc de cele obișnuite. Următorul șir înlocui rezolvat problema - sper că acest lucru ajută:
:%s/\r/\r/g
L's interesant, pentru că am'm înlocuirea pauze de linie, cu același caracter, dar cred că Vim are nevoie doar pentru a obține o curat \r pentru a afișa în mod corect. Am'd fi interesat să știu de fond al sistemului mecanica de ce funcționează.
Primul, folosi `:set ff? să-mi dau seama formatul de fișier fișierul dvs. este.
Cred că ar putea fi unix, atunci problema este fișierul dvs. a fost creat cu fileformat=dosadăugarea "^M^J" la linia de final, dar citesc cu
flieformat=unix` numai eliminarea "^J" de la linia de final, lăsând "^M" nu.
Doar de intrare :e ++ff=dos
în Vim linie de comandă pentru a modifica fișierul dvs.'s a format de la unix la dos. Acesta ar trebui să rezolve problema. Dacă nu, :%s/\r//g
ar trebui să te ajute.
în scopul de a obține ^M de caractere pentru a se potrivi trebuit să-vizual, selectați-l și apoi utilizați sistemul de OPERARE copiați în clipboard pentru a prelua comanda-l. Îl puteți testa prin a face o căutare pentru caracterul înainte de a încerca să înlocuiască comanda.
/^M
ar trebui să selectați prima linie de rau
:%s/^M/\r/g
va înlocui toate rătăcitor ^M cu transportul de returnare.
Acest lucru este la fel de funcții în MacVim, care se bazează pe gvim 7.
EDIT:
Având această problemă din nou pe Windows 10 mașină, care are Ubuntu pentru Windows, și cred că aceasta este cauza fileformat probleme pentru vim. În acest caz, schimbarea ff unix, mac, sau dos făcut nimic altceva decât să schimbe ^M ^J și înapoi din nou.
Soluția în acest caz:
:%s/\r$/ /g
:%s/ $//g
Motivul pentru care am mers pe acest traseu este pentru că am vrut să se asigure că am fost non-distructivă cu dosarul meu. Am putea avea :%s/\r$//g
dar care ar fi șters transportul se întoarce imediat, și ar fi putut avea rezultate neașteptate. În schimb ne-am converti singular CR personaj, aici o ^M personaj, într-un spațiu, și apoi scoateți toate spațiile de la sfârșitul liniilor (care pentru mine este un rezultat dorit, indiferent)
Îmi pare rău pentru revigorarea o întrebare veche, care a fost mult timp de când a răspuns, dar nu părea să fie o confuzie pe jos și am crezut că am'd ajuta clar sus, deoarece acest lucru vine de sus în căutările google.
Nici unul dintre acestea a lucrat pentru mine, așa că am încercat acest lucru, care a lucrat:
tip :%s/
apăsați CTRL-VCTRL-M
tip //g
apăsați Enter
Deci totalul de comandă în Vim shoud arata ca :%s/^M//g
Ce face asta: :%s
(find and replace) /^M/
(ca simbol) /
(cu nr de caractere) " g " (la nivel global).
^M este preluat de Ctrl+V și M, deci, nu
s/^M//g
Există multe alte răspunsuri la această întrebare, dar, totuși, următoarele funcționează cel mai bine pentru mine, ca am nevoie de o linie de comandă soluție:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Explicație:
myfile
:w ++ff=unix
pentru a scrie fișierul folosind unix capetele de linieCtrl+M minimizează fereastra mea, dar Ctrl+Enter de fapt introduce o ^M
caracter. Am avut, de asemenea, să fie sigur că nu pentru a ridica de pe Ctrl cheie între prese.
Deci solutia pentru mine a fost:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Unde `
Soluția de mai sus se va adăuga o linie suplimentară între liniile existente, pentru că există deja un invizibil \r
după ^M
.
Pentru a preveni acest lucru, doriți să ștergeți ^M
caractere fără a le înlocui.
:%s/<Ctrl-V><Ctrl-Enter>//g
Unde %
înseamnă "în acest buffer," " s "înseamnă "membru supleant,"" / " înseamnă "(găsi) următorul model," <Ctrl-V><Ctrl-Enter>
se referă la taste să apăsați pentru a obține ^M
personaj (a se vedea mai sus), //
înseamnă "nimic" (sau, "cu tiparul între aceste două linii oblice, care este gol"), și " g " este un steag sensul "la nivel global," spre deosebire de prima apariție într-o linie.
În cazul meu,
Nimic mai lucrat, am avut un fișier CSV copiat la mașină Linux de la mac-ul meu și am folosit toate comenzile de mai sus, dar nimic nu a ajutat, dar cea de mai jos
tr "\015" "\n" < inputfile > outputfile
Am avut un dosar în care ^M personaje au fost sandwitched între linii ceva de genul de mai jos
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Alternativ, sunt open-source utilități numit dos2unix și unix2dos disponibile, care face acest lucru. Pe un sistem linux, acestea sunt, probabil, instalat în mod implicit; pentru un sistem windows le puteți descărca de http://www.bastet.com/, printre altele.