@LightnessRacesinOrbit - Hm, es funktioniert jetzt auch in Formularen. Ich habe meinen Kommentar zurückgezogen und gesagt, der Link sei tot.
ArtOfWarfare
3
Spiegel für @ LightnessRacesinOrbit-Link, der momentan nicht verfügbar ist
alexpls
4
Wenn Sie :digraphsin vim tippen, wird die Digraph-Tabelle angezeigt, mit der @LightnessRacesinOrbit verknüpft ist.
Askewchan
1
Wenn Sie versuchen, diese Art von Charakter durch PHP zu ersetzen, versuchen Sie diese preg_replace('/[\x01]/', ' ' ,$str); Hoffnung, es hilft.
Rachel Geller
Antworten:
561
Unix verwendet 0xA für ein Zeilenumbruchzeichen. Windows verwendet eine Kombination aus zwei Zeichen: 0xD 0xA. 0xD ist das Wagenrücklaufzeichen. ^Mzufällig zeigt vim 0xD an (0x0D = 13, M ist der 13. Buchstabe im englischen Alphabet).
Sie können alle ^MZeichen entfernen , indem Sie Folgendes ausführen:
:%s/^M//g
Wo ^Mwird eingegeben, indem Sie gedrückt halten Ctrlund tippen, vgefolgt von mund dann loslassen Ctrl. Dies wird manchmal als abgekürzt ^V^M, aber beachten Sie, dass Sie es wie im vorherigen Satz beschrieben eingeben müssen, anstatt es wörtlich zu tippen.
Dieser Ausdruck ersetzt alle Vorkommen von ^Mdurch die leere Zeichenfolge (dh nichts). Ich benutze dies, um ^MDateien zu entfernen, die von Windows nach Unix (Solaris, Linux, OSX) kopiert wurden.
Nur für den Fall, dass Sie unter Windows arbeiten, wird Strg + V wahrscheinlich zum Einfügen zugeordnet. Wenn dies der Fall ist, ordnen die Standardeinstellungen die Taste "Escapezeichen für Sonderzeichen" Strg + Q zu.
R. Martinho Fernandes
8
Die eigentliche Frage ist, warum Vim die Zeilenenden manchmal automatisch erkennt und korrekt anzeigt und manchmal nicht.
Scott
10
Sie sehen das ^MZeichen, wenn die Datei nicht übereinstimmende Zeilenenden aufweist. Verwenden Sie den von Tomasz bereitgestellten Befehl und geben :fileformat={unix|dos|mac}Sie ihn je nach Betriebssystem ein. Wenn es nur wenige Zeilen ohne das ^MZeichen gibt, möchten Sie wahrscheinlich :fileformat=dos. Wenn Sie Dateien in einem anderen Editor als vim bearbeiten, stellen Sie sicher, dass er so konfiguriert ist, dass er mit den Zeilenenden übereinstimmt (Notepad tut dies nicht, aber jeder seriöse Editor wie Notepad ++ oder TextMate).
Mikkel Paulson
9
Hinweis für Anfänger vi: Dieser Befehl muss manuell eingegeben werden. Wenn Sie es einfach in ein offenes Terminal einfügen und ausführen vi, wird der Fehler "Muster nicht gefunden" angezeigt.
IQAndreas
51
@bluesm Ich musste tatsächlich verwenden :%s/\r//g, um die Wagenrückläufe in meiner Datei zu ersetzen. Das ^ V ^ M-Muster konnte nicht in der Datei gefunden werden, in der ich eine Reihe von ^ M-Zeichen hatte.
jonnybot
139
:%s/\r//g
hat heute für mich gearbeitet. Aber meine Situation mag etwas anders gewesen sein.
Die Option g ist nicht erforderlich, es gibt nur eine neue Zeile pro Zeile. :%s/\r//würde genügen.
Frogcoder
7
Die Option g kann sehr gut erforderlich sein, da ein Wagenrücklauf nicht unbedingt eine neue Zeile ist. Beim Öffnen im Unix-Modus ist der Wagenrücklauf nur ein weiteres Zeichen, und beim Öffnen im Windows-Modus ist der Wagenrücklauf nur etwas Besonderes, unmittelbar gefolgt vom Zeilenvorschub.
Jonathan Baldwin
65
So übersetzen Sie die neue Zeile, anstatt sie zu entfernen:
Was soll das eigentlich tun? Für mich sieht es so aus, als würde es Gleiches durch Gleiches ersetzen, was ich mir nicht vorstellen kann, etwas zu ändern. Vermisse ich etwas Besonderes an der Funktionsweise der Syntax hier?
Platinum Azure
16
@PlatinumAzure Ich weiß nicht, warum niemand jemals daran gedacht hat, Ihre Frage zu beantworten. \rhat ein anderes Verhalten im Suchteil als im Ersatzteil. Siehe zum Beispiel stackoverflow.com/a/3834303 .
@TomD Der Link verweist auf die Antwort, die Sie kommentieren.
Bzeaman
Für mich ersetzte dies die nervigen Zeichen durch einen zusätzlichen Zeilenumbruch. @ dlk5730 Antwort funktionierte besser für mich. dh:%s/\r//g
marcusshep
37
Dies bedeutet wahrscheinlich, dass Sie Wagenrückläufe haben (verschiedene Betriebssysteme verwenden unterschiedliche Methoden, um das Zeilenende zu signalisieren).
Verwenden Sie dos2unixdiese Option, um die Dateien zu reparieren oder die Dateiformate in vim festzulegen:
Ich habe eine Textdatei erhalten, die ursprünglich von einem Mac-Benutzer auf einem Windows-Computer generiert wurde, und musste sie mit dem load dataBefehl in eine Linux-MySQL-Datenbank importieren .
Obwohl VIM das Zeichen '^ M' anzeigte, funktionierte keines der oben genannten für mein spezielles 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: Das dos2unixzweimalige Ausführen derselben Datei hat den Trick getan! Die Verwendung des fileBefehls 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 wurde perfekt in die Datenbank importiert.
Wenn Ihre Konfiguration dadurch unterbrochen wird und die ^ M-Zeichen in Zuordnungen erforderlich sind, können Sie die ^ M-Zeichen einfach durch <Enter>oder sogar ersetzen <C-m>(beide als einfache Zeichenfolgen eingegeben, also 7 bzw. 5 Zeichen).
Dies ist die einzige empfohlene, tragbare Methode zum Speichern spezieller Schlüsselcodes in Zuordnungen
Wenn Sie nicht fileformatabsichtlich eine andere angegeben haben (z. B. :e ++ff=unixfür eine Windows-Datei), ist es wahrscheinlich, dass die Zieldatei gemischte EOLs enthält.
Zum Beispiel, wenn eine Datei ein paar Zeilen mit hat <CR><NL>Endungen und andere mit
<NL>Endungen, und fileformatwird eingestellt unixautomatisch von Vim , wenn es zu lesen, ^M (<CR>)wird angezeigt. In solchen Fällen fileformatskommt ins Spiel. Siehe :help ffsfür die Details.
Ich habe festgestellt, dass ich seit Wochen Dateien verschmutzt habe, weil meine Homebrew Mvim-Instanz auf filetype = dos eingestellt war. Die erforderliche Änderung in .vimrc vorgenommen ....
:digraphs
in vim tippen, wird die Digraph-Tabelle angezeigt, mit der @LightnessRacesinOrbit verknüpft ist.preg_replace('/[\x01]/', ' ' ,$str);
Hoffnung, es hilft.Antworten:
Unix verwendet 0xA für ein Zeilenumbruchzeichen. Windows verwendet eine Kombination aus zwei Zeichen: 0xD 0xA. 0xD ist das Wagenrücklaufzeichen.
^M
zufällig zeigt vim 0xD an (0x0D = 13, M ist der 13. Buchstabe im englischen Alphabet).Sie können alle
^M
Zeichen entfernen , indem Sie Folgendes ausführen:Wo
^M
wird eingegeben, indem Sie gedrückt halten Ctrlund tippen, vgefolgt von mund dann loslassen Ctrl. Dies wird manchmal als abgekürzt^V^M
, aber beachten Sie, dass Sie es wie im vorherigen Satz beschrieben eingeben müssen, anstatt es wörtlich zu tippen.Dieser Ausdruck ersetzt alle Vorkommen von
^M
durch die leere Zeichenfolge (dh nichts). Ich benutze dies, um^M
Dateien zu entfernen, die von Windows nach Unix (Solaris, Linux, OSX) kopiert wurden.quelle
^M
Zeichen, wenn die Datei nicht übereinstimmende Zeilenenden aufweist. Verwenden Sie den von Tomasz bereitgestellten Befehl und geben:fileformat={unix|dos|mac}
Sie ihn je nach Betriebssystem ein. Wenn es nur wenige Zeilen ohne das^M
Zeichen gibt, möchten Sie wahrscheinlich:fileformat=dos
. Wenn Sie Dateien in einem anderen Editor als vim bearbeiten, stellen Sie sicher, dass er so konfiguriert ist, dass er mit den Zeilenenden übereinstimmt (Notepad tut dies nicht, aber jeder seriöse Editor wie Notepad ++ oder TextMate).vi
: Dieser Befehl muss manuell eingegeben werden. Wenn Sie es einfach in ein offenes Terminal einfügen und ausführenvi
, wird der Fehler "Muster nicht gefunden" angezeigt.:%s/\r//g
, um die Wagenrückläufe in meiner Datei zu ersetzen. Das ^ V ^ M-Muster konnte nicht in der Datei gefunden werden, in der ich eine Reihe von ^ M-Zeichen hatte.hat heute für mich gearbeitet. Aber meine Situation mag etwas anders gewesen sein.
quelle
:%s/\r//
würde genügen.So übersetzen Sie die neue Zeile, anstatt sie zu entfernen:
quelle
\r
hat ein anderes Verhalten im Suchteil als im Ersatzteil. Siehe zum Beispiel stackoverflow.com/a/3834303 .:%s/^V^M/^V^M/g
sehen Sie hier:%s/\r//g
Dies bedeutet wahrscheinlich, dass Sie Wagenrückläufe haben (verschiedene Betriebssysteme verwenden unterschiedliche Methoden, um das Zeilenende zu signalisieren).
Verwenden Sie
dos2unix
diese Option, um die Dateien zu reparieren oder die Dateiformate in vim festzulegen:quelle
Angenommen, Ihre Textdatei lautet - file.txt, und führen Sie diesen Befehl aus.
Es konvertiert die Textdatei vom Dos- in das Unix-Format.
quelle
Ich habe eine Textdatei erhalten, die ursprünglich von einem Mac-Benutzer auf einem Windows-Computer generiert wurde, und musste sie mit dem
load data
Befehl in eine Linux-MySQL-Datenbank importieren .Obwohl VIM das Zeichen '^ M' anzeigte, funktionierte keines der oben genannten für mein spezielles 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: Das
dos2unix
zweimalige Ausführen derselben Datei hat den Trick getan! Die Verwendung desfile
Befehls zeigt, was auf dem Weg passiert.Und die endgültige Version der Datei wurde perfekt in die Datenbank importiert.
quelle
Unter Unix ist es wahrscheinlich einfacher, den Befehl 'tr' zu verwenden.
quelle
Ich habe sie alle mit sed entfernt:
sed -i -e 's/\r//g' <filename>
Könnte auch durch eine andere Zeichenfolge oder ein anderes Zeichen ersetzt werden:
sed -i -e 's/\r/string/g' <filename>
Diese
sed
Befehle funktionieren in der GNU / Linux-Version vonsed
, müssen jedoch möglicherweise an BSDs (einschließlich macOS) angepasst werden.quelle
Sie können dies in vim mit beheben
Dabei ist ^ das Steuerzeichen.
quelle
^M
ist.Dies ist das einzige, was in meinem Fall funktioniert hat:
:e ++ff=dos
:wq
quelle
Wenn Ihre Konfiguration dadurch unterbrochen wird und die ^ M-Zeichen in Zuordnungen erforderlich sind, können Sie die ^ M-Zeichen einfach durch
<Enter>
oder sogar ersetzen<C-m>
(beide als einfache Zeichenfolgen eingegeben, also 7 bzw. 5 Zeichen).Dies ist die einzige empfohlene, tragbare Methode zum Speichern spezieller Schlüsselcodes in Zuordnungen
quelle
In FreeBSD können Sie das
^M
manuell löschen, indem Sie Folgendes eingeben::%s/
Ctrl+ V, dann Ctrl+ M, dann Ctrl+ Mwieder.quelle
Wenn Sie nicht
fileformat
absichtlich eine andere angegeben haben (z. B.:e ++ff=unix
für eine Windows-Datei), ist es wahrscheinlich, dass die Zieldatei gemischte EOLs enthält.Zum Beispiel, wenn eine Datei ein paar Zeilen mit hat
<CR><NL>
Endungen und andere mit<NL>
Endungen, undfileformat
wird eingestelltunix
automatisch von Vim , wenn es zu lesen,^M (<CR>)
wird angezeigt. In solchen Fällenfileformats
kommt ins Spiel. Siehe:help ffs
für die Details.quelle
Ich habe festgestellt, dass ich seit Wochen Dateien verschmutzt habe, weil meine Homebrew Mvim-Instanz auf filetype = dos eingestellt war. Die erforderliche Änderung in .vimrc vorgenommen ....
quelle
versuchen
:%s/\^M//
Zumindest für mich gearbeitet.quelle