gVim zeigt Wagenrücklauf (^ M) an, auch wenn der Dateimodus explizit DOS ist

78

Ich verwende gVim unter Windows. Mein Code zeigt ^MZeichen am Zeilenende. Früher hatte ich :set ff=doskeinen Erfolg. Die ^MZeichen bleiben für vorhandene Zeilen erhalten, werden jedoch nicht für von mir eingegebene Zeilen angezeigt. Ich habe den Modus auf Mac (zeigt ^JZeichen) und Unix (zeigt auch ^MZeichen) und zurück zu Dos umgestellt . Hat das noch jemand gesehen?

Jerph
quelle
Unter vim.wikia.com/wiki/File_format finden Sie eine umfassende Erläuterung der Zeilenenden in vim / gvim. Dieser Link erklärt auch, wie Sie das Problem beheben können.
Axiopistie

Antworten:

139

Dies geschieht, wenn Sie eine Mischung aus Windows-Zeilenenden und Unix-Zeilenenden haben. Wenn Sie 100 Zeilen haben, 99 sind \ r \ n und eine ist \ n, sehen Sie 99 ^ M Zeichen. Die Lösung besteht darin, diese eine Zeile zu finden und zu ersetzen. Oder führen Sie dos2unix für die Datei aus. Sie können die Windows-Zeilenenden ersetzen durch:

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

richq
quelle
Ich habe diese eine Zeile gefunden, kurz bevor du das geschrieben hast. :) Vielen Dank!
Jerph
1
Heh, typisch. Vim ist großartig, also bleib dabei! :-)
richq
2
Ich wünschte, ich könnte Ihnen +1000 dafür geben
the_e
3
Normalerweise schlage ich sie einfach mit:%s/^M//
TMN
1
Sollte hinzufügen, :set ff=doswenn Sie möchten, dass es dos ist, wenn Sie fertig sind, ala Evans Antwort.
Merlyn Morgan-Graham
42

Sie können auch ausführen:

:e ++ff=dos

So entfernen ^MSie Folgendes : Siehe Dateiformat - Vim Tips Wiki .

beckelmw
quelle
4
Dies war, wonach ich gesucht habe, und es ist die richtige Antwort. Vielen Dank.
Jay Taylor
19

Normalerweise verwende ich Folgendes, um meine Zeilenenden zu bereinigen:

:g/^M$/s///

Um Strg-M zu erhalten, tippe ich normalerweise Strg-Q, dann Strg-M und es wird eingefügt. (In einigen Umgebungen kann es Strg-V und dann Strg-M sein.) Ich weiß nicht warum, aber ich finde das eine, die leichter zu merken ist als die von rq .

Vergessen Sie nicht, dies auch zu tun, :set ff=dosda Sie sonst immer noch mit UNIX-Zeilenenden speichern.

Evan
quelle
Ja, normalerweise benutze ich die ^ M-Version mit Strg-Q und so weiter. Aber es ist schwieriger zu erklären ;-) und die Gruppen-Match-Version ist Copy-Paste-freundlich.
Richq
15

Ich weiß, dass dies bereits beantwortet wurde, aber ein Trick, den ich benutze, ist

:%s/\r/\r/g

Dies ersetzt die Unix-Wagenrückläufe durch die Windows-CRLF. Nur hinzugefügt, falls jemand anderes Probleme hatte.

dsrekab
quelle
6

Sie können diese Zeichen ignorieren!

lege dies in dein vimrc

match Ignoriere / \ r $ /

IvanM
quelle
1
Gut zu wissen, dass dies vorhanden ist, aber gibt es einen guten Anwendungsfall, um nicht übereinstimmende Zeilenenden in einer Datei zu belassen? Scheint, als würde es um Ärger bitten.
Jerph
1
Dies ist mehr, was ich brauchte (das Ändern der Datei ist nicht immer ratsam, wenn es massive Änderungen an einer Datei verursacht, die in einigen Revisionskontrollsystemen
angezeigt
Leider ändert dies die Zeilenenden, sobald Sie die Datei speichern. Es erzeugt also genau diese unerwünschten großen Änderungen im Leerzeichen, nur ohne es Ihnen zu zeigen. Zumindest für mich. :(
peschü
4

Eigentlich funktionierte für mich (unter 64-Bit-Fenstern, gVIM: 7.2):

:set ffs=dos

nicht nur: ff

ra170
quelle
4

Ausführen von Vim 7.3 unter Windows 7. Ich habe den folgenden Befehl verwendet:

:%s/^M/\r/g

Um den ^ MI zu erstellen, geben Sie STRG + Q und dann STRG + M ein.

ddelrio1986
quelle
2

Dies ist wahrscheinlich für viele von Ihnen ein bisschen einfach, aber auf den ersten Blick ist es nützlich.

Basierend auf der Antwort von richq fand ich diese in meinem vimrc nützlich. Beachten Sie, dass der zweite Befehl normalerweise auskommentiert wird, da er dd etwas verwirrend macht, da Vim auf einen weiteren Tastendruck wartet, wenn es sich um den zugeordneten ex-Befehl handelt.

Funktion! D2u ()
    Führen Sie '% s / \ r \ (\ n \) / \ 1 / g' aus.
Endfunktion
"map d2u:% s / \ r \ (\ n \) / \ 1 / g

Der erste wird durch Eingabe von call D2u()ex und der zweite durch Drücken D2uim Bearbeitungsmodus ausgeführt.

Peter Shannon
quelle
2

Dies sind zusätzliche CR-Zeilenenden, normalerweise aufgrund der Verwendung einer Datei auf gemischten UNIX / DOS-Systemen.

Möglicherweise ist die kürzeste Antwort, um ein einzelnes ^ M am Ende jeder Zeile zu entfernen, und was ich verwende ,:

:%s/\r

was äquivalent ist zu:

:%s/\r//

Die Schrägstriche sind jedoch nicht erforderlich (sie werden angenommen).

thebriguy
quelle
1

habe viele Dinge ausprobiert, aber das Folgende hat funktioniert

:%s/\r/\r/g

Hinweis: Verwenden Sie g, wenn Sie den Effekt auf die gesamte Datei haben möchten

Atul Subhash
quelle