it-swarm.com.de

Was bedeutet der Buchstabe ^ M in Vim?

Ich bekomme immer wieder ^M Zeichen in mein vimrc und es bricht meine Konfiguration.

460
Max

Unix verwendet 0xA für ein Newline-Zeichen. Windows verwendet eine Kombination aus zwei Zeichen: 0xD 0xA. 0xD ist das Wagenrücklaufzeichen. ^M ist die Art und Weise, wie vim 0xD anzeigt (0x0D = 13, M ist der 13. Buchstabe im englischen Alphabet).

Sie können alle ^M Zeichen entfernen, indem Sie Folgendes ausführen:

:%s/^M//g

Wobei ^M durch Gedrückthalten eingegeben wird Ctrl und tippen v gefolgt von mund dann loslassen Ctrl. Dies wird manchmal als ^V^M abgekürzt, aber beachten Sie, dass Sie es wie im vorherigen Satz beschrieben eingeben müssen, anstatt es wörtlich auszutippen.

Dieser Ausdruck ersetzt alle Vorkommen von ^M durch die leere Zeichenfolge (d. H. Nichts). Ich benutze dies, um ^M in Dateien zu entfernen, die von Windows nach Unix (Solaris, Linux, OSX) kopiert wurden.

518
Tomasz Stanczak
:%s/\r//g 

arbeitete heute für mich. Aber meine Situation mag etwas anders gewesen sein.

128
dlk5730

So übersetzen Sie die neue Zeile, anstatt sie zu entfernen:

:%s/\r/\r/g
62
Mori

Dies bedeutet wahrscheinlich, dass Sie einen Zeilenumbruch haben (verschiedene Betriebssysteme signalisieren das Zeilenende auf unterschiedliche Weise).

Verwenden Sie dos2unix, um die Dateien zu reparieren oder die Dateiformate in vim festzulegen:

set ffs=unix,dos
36
cnicutar

Nehmen wir an, Ihre Textdatei ist - file.txt, und führen Sie dann den folgenden Befehl aus:

dos2unix file.txt 

Es konvertiert die Textdatei von DOS in das Unix-Format.

16
akritaag

Unter Unix ist es wahrscheinlich einfacher, den Befehl 'tr' zu verwenden.

cat file1.txt | tr "\r" "\n" > file2.txt
8
Irving Rabin

Ich habe sie alle mit sed entfernt:

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

Könnte auch durch eine andere Zeichenfolge oder ein anderes Zeichen ersetzt werden:

sed -i -e 's/\r/string/g'

7
Freedom_Ben

Ich habe eine Textdatei erhalten, die ursprünglich von einem Mac-Benutzer auf einem Windows-Computer erstellt wurde und die mit dem Befehl load data in eine Linux-MySQL-Datenbank importiert werden musste.

Obwohl VIM das Zeichen '^ M' anzeigte, funktionierte keines der oben genannten bei meinem speziellen Problem. Die Daten wurden importiert, waren jedoch immer auf irgendeine Weise beschädigt. Die Lösung war am Ende ziemlich einfach (nach viel Frust).

Lösung: Die Ausführung von dos2unixZWEIMAL für dieselbe Datei hat den Trick gemacht! Die Verwendung des Befehls file zeigt, was auf dem Weg passiert.

$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text

Und die endgültige Version der Datei perfekt in die Datenbank importiert.

5
Anthony Palmer

Sie können dies in vim mit beheben

:1,$s/^V^M//g

dabei ist ^ das Steuerzeichen.

4
Scott C Wilson

Dies ist das einzige, was in meinem Fall funktioniert hat:

:e ++ff=dos

:wq

3
Sardeep Lakhera

Wenn Ihre Konfiguration dadurch beschädigt wird und die M-Zeichen in Zuordnungen erforderlich sind, können Sie die M-Zeichen einfach durch <Enter> oder sogar <C-m> ersetzen (beide als einfache Zeichenfolgen, also 7 und 5 Zeichen) , beziehungsweise).

Dies ist die einzige empfohlene, tragbare Methode zum Speichern spezieller Schlüsselcodes in Zuordnungen

2
sehe

In FreeBSD können Sie den ^M manuell löschen, indem Sie Folgendes eingeben:

:%s/ Ctrl+V, dann Ctrl+M, dann Ctrl+M nochmal.

2
Victor Ong

Wenn Sie nicht absichtlich eine andere fileformat angegeben haben (z. B. :e ++ff=unix für eine Windows-Datei), hat die Zieldatei wahrscheinlich gemischte EOLs.

Wenn eine Datei beispielsweise einige Zeilen mit <CR><NL> und andere mit <NL> hat und fileformat beim Lesen von Vim automatisch auf unix gesetzt wird, wird ^M (<CR>) wird auftauchen. In solchen Fällen kommt fileformats ins Spiel. Siehe :help ffs für Einzelheiten.

1
ebk

Ich habe festgestellt, dass ich seit Wochen Dateien verschmutzt habe, da meine Homebrew Mvim-Instanz auf die Verwendung von filetype = dos eingestellt war. Die erforderliche Änderung in .vimrc vorgenommen ....

0
nichg

try :%s/\^M// Zumindest hat das bei mir funktioniert.

0
xuc