522 Stimmen

Wie konvertiert man den ^M-Zeilenumbruch in einer in vim geöffneten Datei in einen 'normalen' Zeilenumbruch?

Vim zeigt in jeder Zeile mit der Endung ^M

Wie kann ich diesen durch einen "normalen" Zeilenumbruch ersetzen?

35voto

chenxsan Punkte 1598

Erstens, verwenden Sie :set ff? um herauszufinden, welches Dateiformat Ihre Datei hat.

Ich denke, es könnte sein unix dann liegt das Problem darin, dass Ihre Datei mit fileformat=dos Hinzufügen von "^M^J" am Zeilenende, aber lesen mit flieformat=unix nur das "^J" vom Zeilenende entfernt und das "^M" dort belassen.

Einfach eingeben :e ++ff=dos in der Vim-Befehlszeile, um das Format Ihrer Datei von Unix auf Dos zu ändern. Damit sollte das Problem gelöst sein. Falls nicht, :%s/\r//g sollte Ihnen weiterhelfen.

29voto

Metagrapher Punkte 8162

Um das Zeichen ^M zu finden, musste ich es visuell markieren und dann mit dem OS-Befehl "In die Zwischenablage kopieren" abrufen. Sie können es testen, indem Sie nach dem Zeichen suchen, bevor Sie den Ersetzungsbefehl ausprobieren.

/^M

sollte die erste schlechte Zeile auswählen

:%s/^M/\r/g

ersetzt alle fehlerhaften ^M durch Zeilenumbrüche.

Dies ist wie die Funktionen in MacVim, das auf gvim 7 basiert.

EDIT :

Ich habe dieses Problem wieder auf meiner Windows 10 Maschine, die Ubuntu für Windows hat, und ich denke, dass dies Dateiformat Probleme für vim verursacht. In diesem Fall Ändern der ff zu unix, mac, oder dos hat nichts anderes als die ^M zu ^J und wieder zurück zu ändern.

Die Lösung in diesem Fall:

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

Ich habe mich für diesen Weg entschieden, weil ich sichergehen wollte, dass ich meine Datei nicht zerstörerisch bearbeite. Ich könnte haben :%s/\r$//g aber das hätte die Zeilenumbrüche gelöscht, was zu unerwarteten Ergebnissen führen könnte. Stattdessen wandeln wir das einzelne CR-Zeichen, hier ein ^M-Zeichen, in ein Leerzeichen um und entfernen dann alle Leerzeichen am Ende der Zeilen (was für mich in jedem Fall ein wünschenswertes Ergebnis ist)

Es tut mir leid, dass ich eine alte Frage wiederbelebt habe, die schon lange beantwortet wurde, aber es schien eine gewisse Verwirrung zu herrschen, und ich dachte, ich würde dazu beitragen, einiges davon aufzuklären, da dieses Thema in der Google-Suche weit oben erscheint.

24voto

d-_-b Punkte 19755

Bei mir hat nichts davon funktioniert, also habe ich das hier ausprobiert, und es hat funktioniert:

Typ :%s/

Presse CTRL-VCTRL-M

Typ //g

Presse Enter

Der Gesamtbefehl in Vim sollte also wie folgt aussehen :%s/^M//g

Was dies bewirkt: :%s (suchen und ersetzen) /^M/ (dieses Symbol) / (ohne Zeichen) g (global).

18voto

Andrew Sledge Punkte 9879

^M wird abgerufen durch Ctrl + V y M so tun

s/^M//g

17voto

BHarman Punkte 532

Ohne die Strg-Taste zu benutzen: :%s/\r$//

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X