Wie konvertiert man die ^M linebreak 'normalen' Zeilenumbruch in einer geöffneten Datei in vim?

StackOverflow https://stackoverflow.com/questions/811193

  •  03-07-2019
  •  | 
  •  

Frage

vim zeigt an jedem Zeilenende ^M

Wie ich tun, um ersetzen Sie diese mit einer 'normalen' linebreak?

War es hilfreich?

Lösung

Das ist das einzige, was für mich gearbeitet:

  

: e ++ ff = dos

Gefunden bei: http://vim.wikia.com/wiki/File_format

Andere Tipps

Befehl

:%s/<Ctrl-V><Ctrl-M>/\r/g

Wo <Ctrl-V><Ctrl-M> bedeutet Typ Strg + V dann Strg + M .

Erklärung

:%s

Ersatz,% = alle Zeilen

<Ctrl-V><Ctrl-M>

^ M Zeichen (die Ctrl-V ist ein Vim Weise die Strg-Zeichen ^ schreiben und Ctrl-M die M nach dem regulären Ausdruck schreibt, was zu ^ M Sonderzeichen)

/\r/

mit neuer Linie (\r)

g

Und tut es weltweit (nicht nur das erste Vorkommen auf der Linie).

Unter Linux und Mac OS, die folgenden Werke,

:%s/^V^M/^V^M/g

wobei ^V^M bedeutet Typ Ctrl + V , dann Ctrl + M .

Hinweis: unter Windows möchten Sie wahrscheinlich ^Q statt ^V verwenden, da standardmäßig ^V abgebildet Text einfügen

.

Innerhalb vim, schauen Sie sich das Dateiformat - DOS oder Unix:

:set filetype=unix

:set fileformat=unix

Die Datei geschrieben wird wieder ohne Wagenrücklauf (CR, ^ M) Zeichen.

Eine Datei, die ich mit BBEdit erstellt hatte gesehen, in MacVim war ein Bündel von ^M Linie Anzeige anstelle von Stammkunden zurückgibt. Die folgende Zeichenfolge das Problem gelöst replace - hoffe, das hilft:

:%s/\r/\r/g

Es ist interessant, weil ich bin Linie zu ersetzen mit dem gleichen Charakter bricht, aber ich nehme an Vim braucht nur ein frisch \ r zu erhalten korrekt anzuzeigen. Ich würde mich interessieren, die zugrunde liegenden Mechanismen der wissen, warum das funktioniert.

Verwenden Sie zuerst :set ff?, um das Dateiformat herauszufinden, Ihre Datei.

Ich denke, es unix werden könnte, dann ist das Problem Dateien mit fileformat=dos erstellt wurden hinzugefügt „^ M ^ J“ auf die Linie Ende, sondern nur lesen mit flieformat=unix den „^ J“ aus dem Leitungsende zu entfernen, so dass die " ^ M“gibt.

Geben Sie einfach :e ++ff=dos in Vim Befehlszeile Ihrer Datei-Format von Unix zu DOS ändern. Es sollte das Problem lösen. Wenn nicht, sollten Sie :%s/\r//g helfen.

, um die ^ M Zeichen zu bekommen ich es wählen musste passen, um visuell und dann die OS Kopie verwenden Sie den Befehl in die Zwischenablage kopieren, um es abzurufen. Sie können es testen, indem Sie eine Suche nach dem Charakter zu tun, bevor Sie ersetzen Befehl versuchen.

/^M

sollte die erste schlechte Zeile auswählen

:%s/^M/\r/g

ersetzt alle verirrten ^ M mit Wagenrücklauf.

Dies ist als Funktionen in MacVim, die auf Gvim 7 basieren.

EDIT:

Haben Sie dieses Problem wieder auf meiner Windows-10-Maschine, die Ubuntu für Windows hat, und ich denke, das ist Dateiformat Probleme für vim verursacht. In diesem Fall wird die Änderung der ff Unix, Mac oder dos tat nichts anderes, als die ^ M ^ J zu ändern und wieder zurück.

Die Lösung in diesem Fall:

:%s/\r$/ /g
:%s/ $//g

Der Grund, warum ich diesen Weg gegangen ist, weil ich, ich wäre nicht-destruktiv mit meiner Datei, um sicherzustellen wollte. Ich kann :%s/\r$//g haben, aber das würde den Wagenrücklauf direkt aus gelöscht hat, und unerwartete Ergebnisse gehabt haben könnte. Stattdessen wandeln wir den Singular CR-Zeichen, hier ein ^ M Zeichen, in einen Raum, und entfernen Sie alle Leerzeichen am Ende der Linien (die für mich ein wünschenswertes Ergebnis ist unabhängig)

Es tut uns eine alte Frage wiederzubeleben, die lange beantwortet wurde seitdem, aber es schien einige Verwirrung zu Fuß zu sein, und ich dachte, dass ich etwas davon aufklären helfen würde, da dies kommt hoch oben in Google-Suchen.

Keiner von ihnen arbeitete für mich, also habe ich versucht, diese, die gearbeitet:

Typ :%s/

drücken Sie CTRL-V CTRL-M

Typ //g

drücken Sie Enter

So ist der gesamte Befehl in Vim shoud wie :%s/^M//g aussehen

Was das bedeutet:. :%s (Suchen und Ersetzen) /^M/ (das Symbol) / (ohne Zeichen) g (global)

Ohne dass Strg verwenden:     :%s/\r$//

Einfache Sache, die für mich gearbeitet

dos2unix   filename

Ich tat dies mit sed:

sed -i -e 's/\r/\n/g' filename

^ M abgerufen durch Strg + V und M , so tun

s/^M//g

Was ist nur: :%s/\r//g Die völlig funktioniert für mich.

Was das bedeutet ist nur das Ende der Linie aller Linien zu reinigen, es entfernt den ^ M und das ist es.

Strg + M minimiert mein Fenster, aber Strg + Enter tatsächlich fügt einen ^M Charakter. Ich hatte auch sicher sein, nicht die Strg -Taste zwischen den Pressen zum Abheben.

So ist die Lösung für mich war:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

Wo <Ctrl-V><Ctrl-Enter> bedeutet drücken und halten Sie Strg , drücken Sie die Taste V , drücken Sie Enter , und dann freigeben Strg .

Wenn Sie auf einer Windows-generierte Datei arbeiten

Die obige Lösung wird eine zusätzliche Zeile zwischen dem bestehenden Linien hinzufügen, weil es bereits ein unsichtbares \r nach dem ^M ist.

Um dies zu verhindern, sollten Sie die ^M Zeichen löschen, ohne sie zu ersetzen.

:%s/<Ctrl-V><Ctrl-Enter>//g

Wo % bedeutet „in diesem Puffer“ s bedeutet „Ersatz“ / Mittel „(finden) das folgende Muster“ bezieht sich <Ctrl-V><Ctrl-Enter> auf die Tasten zu drücken, um den ^M Charakter zu erhalten (siehe oben), // bedeutet „ nichts“(oder‚mit dem Muster zwischen diesen beiden Schrägstrichen, die leer‘) und g ist ein flag bedeutet‚global‘, wie er in einer Linie mit dem ersten Auftreten gegenüber.

Es gibt viele andere Antworten auf diese Frage, aber nach wie vor, die folgenden am besten für mich, da ich eine Kommandozeilen-Lösung benötigt:

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

Erklärung:

  • Ohne irgendwelche .vimrc Dateien öffnen myfile Laden
  • Ausführen :e ++ff=dos einen erneuten Laden der gesamten Datei als dos Zeilenende zu erzwingen.
  • Ausführen :w ++ff=unix die Datei mit Unix-Zeilenenden
  • schreiben
  • Beenden vim

Das funktioniert für mich:

  1. Set-Dateiformat auf Unix (\n Zeilenende)
  2. speichern Sie die Datei

So in vim:

:set ff=unix
:w

In meinem Fall

Im Moment oben arbeitete, hatte ich eine CSV-Datei von meinem Mac auf Linux-Rechner kopiert und ich verwendet, um alle oben genannten Befehle aber nichts half, aber die unter einem

tr "\015" "\n" < inputfile > outputfile

hatte ich eine Datei, in der ^ M Zeichen zwischen den Zeilen so etwas wie unten

sandwichartig wurden
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

Alternativ gibt es Open-Source-Dienstprogramme genannt dos2unix und unix2dos zur Verfügung, die eben dies tun. Auf einem Linux-System, das sie wahrscheinlich standardmäßig installiert sind; für ein Windows-System können Sie sie von http://www.bastet.com/ unter anderem herunterladen.

sed s/^M//g file1.txt > file2.txt

Dabei gilt ^ M durch gleichzeitiges Drücken der Tasten 3 eingegeben wird, ctrl + v + m

Verwendung dos2unix Dienstprogramm wenn die Datei auf Fenster erstellt, verwenden mac2unix Dienstprogramm, wenn die Datei auf dem Mac erstellt wurde. :)

Das funktioniert für mich:

:% s/\r\n/\r

Zu speichern von Tastenanschlägen, vermeiden Sie die Eingabe Strg+VStrg+M indem Sie diese in einem mapping.Öffnen Sie einfach eine Datei mit ein ^M Charakter, kopiere es und füge es in eine Zeile wie diese in Ihrem .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

Keiner dieser Vorschläge wurde für mich zu arbeiten eine Last von ^M Zeilenumbrüchen erhalten geschaffen zu haben, während sowohl mit vim und Eclipse arbeiten. Ich vermute, dass ich einen Außen Fall begegnet, aber im Fall hilft es jemanden, den ich habe.

:%s/.$//g

Und es aussortiert mein Problem

:g/^M/s// /g

Wenn Sie geben ^M Shift+6 Caps+M verwenden wird es nicht akzeptieren.

Sie müssen ctrl+v ctrl+m eingeben.

^M gibt unerwünschte Zeilenumbrüche. Um damit umgehen zu können wir den sed Befehl wie folgt:

sed 's/\r//g'

Just removeset binary in Ihrem .vimrc!

einen der folgenden Befehle verwenden:

:%s/\r//g

oder

:%s/\r\(\n\)/\1/g

“Mit dieser Funktion erhält die Liste der Sprünge

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()

Ich habe einen Nachmittag kämpfen mit \ n Strg-V 012 (von denen beide versorgen mich mit null) ausgegeben. & Durch diesen Thread gearbeitet, bis ich metagrapher ist erreicht.

\r funktionierte gut für mich!

/),/s/),/)\r/g

drehte etwas wie folgt aus:

  

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,

in etwa so aus:

  

26 libwv-1.2-4: i386 (1.2.9-3, Automatik)
     27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, Automatik)
     28 jed: i386 (0.99.19-2.1)

Magie. Ich bin zutiefst dankbar

oder anstelle vim verwenden können Sie reparieren nur die Zeilenumbrüche mit diesem Befehl

fromdos <filename.txt>

Hoffe, es hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top