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?


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


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


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.


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.


6

Sie können diese Zeichen ignorieren!

lege dies in dein vimrc

match Ignoriere / \ r $ /


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


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.


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.


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).


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.