web-dev-qa-db-de.com

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

vim zeigt auf jeder Zeile mit der Endung ^ M

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

449
ByteNirvana

Dies ist das einzige, was für mich funktioniert hat:

: e ++ ff = dos

Fand es unter: http://vim.wikia.com/wiki/File_format

99
Pam

Befehl

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

Wobei <Ctrl-V><Ctrl-M> Typ bedeutet Ctrl+V dann Ctrl+M.

Erläuterung

:%s

ersatz,% = alle Zeilen

<Ctrl-V><Ctrl-M>

^ M-Zeichen (Strg-V ist eine Vim-Schreibweise für das Zeichen Strg ^, und Strg-M schreibt das M nach dem regulären Ausdruck, was zu dem Sonderzeichen ^ M führt.)

/\r/

mit neuer Zeile (\r)

g

Und zwar global (nicht nur beim ersten Auftreten in der Leitung).

551

Unter Linux und Mac OS funktioniert Folgendes:

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

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

Hinweis: Unter Windows möchten Sie wahrscheinlich ^Q anstelle von ^V verwenden, da ^V standardmäßig zum Einfügen von Text zugeordnet ist.

412
Paul Tomblin

Sehen Sie sich in vim das Dateiformat an - DOS oder Unix:

:set filetype=unix

:set fileformat=unix

Die Datei wird ohne Wagenrücklaufzeichen (CR, ^ M) zurückgeschrieben.

180

Eine Datei, die ich mit BBEdit in MacVim erstellt hatte, zeigte eine Reihe von ^M-Zeilenrückgaben anstelle von regulären. Die folgende Zeichenfolge ersetzt das Problem - hoffe das hilft:

:%s/\r/\r/g

Es ist interessant, weil ich Zeilenumbrüche durch dasselbe Zeichen ersetze, aber ich denke, dass Vim nur ein frisches\r benötigt, um korrekt angezeigt zu werden. Ich würde gerne wissen, warum es so funktioniert.

101
netpoetica

Verwenden Sie zunächst :set ff?, um das Dateiformat Ihrer Datei zu ermitteln. 

Ich denke, es könnte unix sein, dann liegt das Problem darin, dass Ihre Datei mit fileformat=dos erstellt wurde, wobei "^ M ^ J" am Zeilenende hinzugefügt wurde. Lesen Sie jedoch mit flieformat=unix, wobei nur "^ J" vom Zeilenende entfernt wird. Dort. 

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

34
chenxsan

damit das ^ M-Zeichen übereinstimmt, musste ich es visuell auswählen und dann den Befehl OS in die Zwischenablage kopieren verwenden, um es abzurufen. Sie können es testen, indem Sie nach dem Zeichen suchen, bevor Sie den Befehl zum Ersetzen ausführen.

/^M

sollte die erste fehlerhafte Zeile auswählen

:%s/^M/\r/g

ersetzt alle fehlerhaften ^ M durch Wagenrücklauf.

Dies ist eine Funktion in MacVim, die auf gvim 7 basiert.

EDIT:

Ich habe dieses Problem erneut auf meinem Windows 10-Computer, auf dem Ubuntu für Windows installiert ist, und ich denke, das verursacht Dateiformatprobleme für vim. In diesem Fall hat das Ändern von ff in Unix, Mac oder DOS nichts anderes getan, als ^ M in ^ J und wieder zurück zu ändern.

Die Lösung in diesem Fall:

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

Der Grund, warum ich diesen Weg gegangen bin, ist, weil ich sicherstellen wollte, dass meine Datei nicht zerstörerisch ist. Ich könnte :%s/\r$//g haben, aber das hätte die Wagenrückläufe gelöscht und unerwartete Ergebnisse gehabt. Stattdessen konvertieren wir das einzelne CR-Zeichen, hier ein ^ M-Zeichen, in ein Leerzeichen und entfernen dann alle Leerzeichen am Zeilenende (was für mich trotzdem ein wünschenswertes Ergebnis ist).

Es tut mir leid, dass Sie eine alte Frage wiederbelebt haben, die längst beantwortet wurde, aber es schien einige Verwirrung zu geben, und ich dachte, ich würde helfen, einiges davon zu klären, da dies bei der Google-Suche hoch ist.

28
Metagrapher

Keines davon hat bei mir funktioniert, also habe ich es versucht, was funktioniert hat:

typ :%s/

drücken Sie CTRL-VCTRL-M

typ //g

drücken Sie Enter

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

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

22
d-_-b

Ohne dass Sie Strg: .__ verwenden müssen. :%s/\r$//

14
Brian Harman

Einfache Sache, die für mich funktioniert hat 

dos2unix   filename
12
Shahzeb

Ich habe das mit sed gemacht:

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

12
Freedom_Ben

^ M wird abgerufen von Ctrl+V und M, dann mach's

s/^M//g
12
Andrew Sledge

Was ist mit nur: :%s/\r//g Das hat für mich total funktioniert.

Was dies tut, ist nur das Zeilenende von allen Zeilen zu säubern, das ^ M zu entfernen und das ist es.

9
tonatiuhnb

Es gibt viele andere Antworten auf diese Frage, aber am besten funktionieren für mich die folgenden, da ich eine Befehlszeilenlösung benötigte:

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

Erläuterung:

  • Öffnen Sie myfile, ohne irgendwelche .vimrc-Dateien zu laden.
  • Führen Sie :e ++ff=dos aus, um das erneute Laden der gesamten Datei als Doszeilenende zu erzwingen.
  • Führen Sie :w ++ff=unix aus, um die Datei mit Unix-Zeilenenden zu schreiben
  • Beenden Sie vim
8
Micah Smith

Ctrl+M minimiert mein Fenster, aber Ctrl+Enter Fügt tatsächlich ein ^M-Zeichen ein. Ich musste auch sicher sein, das nicht abzuheben Ctrl Taste zwischen den Drücken.

Die Lösung für mich war also:

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

Wobei <Ctrl-V><Ctrl-Enter> bedeutet gedrückt halten Ctrl, Drücken und Loslassen V, Drücken und Loslassen Enter, nd dann loslassen Ctrl.

Wenn Sie an einer von Windows generierten Datei arbeiten

Die obige Lösung fügt eine zusätzliche Zeile zwischen vorhandenen Zeilen hinzu, da nach dem \r bereits ein unsichtbarer ^M vorhanden ist.

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

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

Wo % "in diesem Puffer" bedeutet, s "Ersatz" bedeutet, / "(finde) das folgende Muster," <Ctrl-V><Ctrl-Enter> bezieht sich auf die Tasten, die gedrückt werden müssen, um das Zeichen ^M zu erhalten (siehe oben), // bedeutet "mit nichts" ( oder "mit dem Muster zwischen diesen beiden Schrägstrichen, das leer ist") und g ist ein Flag was "global" bedeutet, im Gegensatz zum ersten Vorkommen in einer Zeile.

8
CrannDarach

In meinem Fall, 

Nichts oben hat funktioniert, ich hatte eine CSV-Datei von meinem Mac auf einen Linux-Rechner kopiert und ich habe alle oben genannten Befehle verwendet, aber nichts half als das Folgende

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

Ich hatte eine Datei, in der ^ M Zeichen zwischen den Zeilen etwa wie unten sandwitched waren

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

Das hat für mich funktioniert:

  1. Dateiformat auf Unix setzen (\n Zeilenende)
  2. speicher die Datei

Also in vim:

:set ff=unix
:w
6
Stryker

Alternativ gibt es Open-Source-Dienstprogramme mit den Namen dos2unix und unix2dos, die genau dies tun. Auf einem Linux-System werden sie wahrscheinlich standardmäßig installiert. Für ein Windows-System können Sie sie unter anderem von http://www.bastet.com/ herunterladen.

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

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

5
Blue Diamond

verwenden Sie das Dienstprogramm dos2unix, wenn die Datei unter Windows erstellt wurde.... Verwenden Sie das Dienstprogramm mac2unix, wenn die Datei auf einem Mac erstellt wurde. :)

4
Ramesh

Das hat für mich funktioniert:

:% s/\r\n/\r
2
ContextSwitch

Ich weiß, dass dies vielleicht zu alt ist, aber ich hoffe, dass jemand dies nützlich finden kann.

Verwenden Sie einen dieser Befehle:

:%s/\r//g

Oder

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

Um Tastatureingaben speichern, können Sie die Eingabe vermeiden Ctrl+VCtrl+M indem Sie dies in einem Mapping platzieren. Öffnen Sie einfach eine Datei mit einem ^ M-Zeichen, ziehen Sie es heraus und fügen Sie es in eine Zeile in Ihrer .vimrc-Datei ein:

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

Entfernen Sie einfachset binary in Ihrer .vimrc!

1
Alex Falcucci

^M gibt unerwünschte Zeilenumbrüche. Um dies zu handhaben, können wir den Befehl sed wie folgt verwenden:

sed 's/\r//g'
1
Manoj Kumar

Keiner dieser Vorschläge funktionierte für mich, da ich mit vim und Eclipse eine Menge von ^M-Zeilenumbrüchen bekam. Ich habe den Verdacht, dass ich auf einen äußeren Fall gestoßen bin, aber falls es jemandem hilft, den ich tat.

:%s/.$//g

Und es hat mein Problem gelöst 

1
rogermushroom
:g/^M/s// /g

Wenn Sie ^M mit Shift+6 Caps+M eingeben, wird dies nicht akzeptiert.

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

1
Shravan Kumar

Über eine serielle Konsole funktionierten alle vi und sed-Lösungen für mich nicht. Ich musste:

cat inputfilename | tr -d '\r' > outputfilename
0
robsn

Keines der oben genannten Dinge funktionierte für mich. (Ersetzung auf\r, ^ M, Strg-v-Strg-m) Ich habe Kopieren und Einfügen verwendet, um meinen Text in eine neue Datei einzufügen. 

Wenn Sie über störende Makros verfügen, können Sie :set paste vor dem Einfügevorgang und :set nopaste danach versuchen.

0
statueofmike

Anstatt vim zu verwenden, können Sie die Zeilenumbrüche einfach mit diesem Befehl korrigieren

fromdos <filename.txt>

Ich hoffe es hilft!

0
bsmoo

So verwenden Sie sed unter MacOS:

sed -i.bak $'s/\r//' <filename>

Erläuterung: Die $'STRING'-Syntax bezieht sich hier auf die Bash-Shell. Macs behandeln \r nicht als Sonderzeichen. Indem Sie die Befehlszeichenfolge in $'' zitieren, fordern Sie die Shell auf, \r durch das im ANSI-C-Standard angegebene \r-Zeichen zu ersetzen.

0
Nitin Nain

"Diese Funktion behält die Liste der Sprünge bei

fun! Dos2unixFunction()
let [email protected]/
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()
0
SergioAraujo

Verwenden Sie in vim den Befehl:

:% s/\ r\n/\ r/g

Wo möchten Sie suchen und ersetzen:

\ r\n

in

\ r

und das

/G

ist für global

Beachten Sie, dass dies dasselbe ist wie die Antwort von @ContextSwitch, jedoch mit dem globalen Flag

0
markyk

Ich habe einen Nachmittag lang mit\n Strg-v 012 zu kämpfen gehabt (beide liefern mir Null). & arbeitete durch diesen Thread, bis ich Metagrapher's erreichte.

\r hat für mich gut funktioniert! 

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

drehte sich so etwas:

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 so etwas:

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

Zauber. Ich bin zutiefst dankbar

0
user1997684