Ich bekomme immer wieder ^M
Zeichen in mein vimrc und es bricht meine Konfiguration.
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.
:%s/\r//g
arbeitete heute für mich. Aber meine Situation mag etwas anders gewesen sein.
So übersetzen Sie die neue Zeile, anstatt sie zu entfernen:
:%s/\r/\r/g
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
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.
Unter Unix ist es wahrscheinlich einfacher, den Befehl 'tr' zu verwenden.
cat file1.txt | tr "\r" "\n" > file2.txt
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'
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 dos2unix
ZWEIMAL 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.
Sie können dies in vim mit beheben
:1,$s/^V^M//g
dabei ist ^ das Steuerzeichen.
Dies ist das einzige, was in meinem Fall funktioniert hat:
:e ++ff=dos
:wq
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
In FreeBSD können Sie den ^M
manuell löschen, indem Sie Folgendes eingeben:
:%s/
Ctrl+V, dann Ctrl+M, dann Ctrl+M nochmal.
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.
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 ....
try :%s/\^M//
Zumindest hat das bei mir funktioniert.