Warum fügt Emacs am Ende jeder Zeile ^ m ein?

8

Warum fügt Emacs in meiner Linux-Umgebung am Ende jeder Zeile ^ m ein?

Yazz.com
quelle

Antworten:

15

Emacs Line Return und Windows, Unix, Mac, All That ^ M ^ J ^ L.

F: Warum zeigt Emacs ^ M in einem Puffer an?

A: Das "^ M" ist die ASCII-Caret-Notation für nicht druckbares Wagenrücklaufzeichen (ASCII 13). Wenn Emacs dies zeigt, liegt dies wahrscheinlich daran, dass Sie gemischte Zeichen aus ^ M und ^ J haben und Emacs diese nicht konsistent als Zeilenumbrüche interpretieren können.

Um dies zu beheben, rufen Sie "set-buffer-file-coding-system" auf und geben Sie dann eines der folgenden Elemente an: "mac", "dos", "unix". Speichern Sie dann die Datei. Wenn dies das Problem nicht behebt, können Sie es mithilfe von Suchen und Ersetzen manuell entfernen.

kurzlebig
quelle
Als Nachtrag C-x RET fgilt der Schlüsselakkord für das Set-Buffer-File-Coding-System, sodass Sie diesen stattdessen eingeben können. Ich erinnere mich jedoch nie daran.
Quodlibetor
1

Ich weiß, dass es eine alte Frage ist, aber für die Aufzeichnung gibt es andere Gründe, warum ^ M am Ende von Dateien erscheint. Ich hatte gerade das gleiche Problem. Folgendes ist passiert:

  1. Jeden Tag benutze ich die gleiche Textdatei auf Emacs und habe ^ M nie gesehen. Ich benutze diese Datei, um persönliche Notizen zu machen.
  2. Als ich das letzte Mal die Datei verwendet habe, habe ich den Inhalt einer E-Mail, die ich in MS Outlook erhalten habe, kopiert und eingefügt.
  3. Heute habe ich dieselbe alte Datei geöffnet und jede einzelne Zeile hatte am Ende ein ^ M, und alle Nicht-ASCII-Zeichen wurden durch seltsame Codes wie ??? ersetzt.

Wie man es repariert:

Öffnen Sie dieselbe Datei auf VI (ja, ich weiß, der Erzfeind) und suchen Sie nach Zeichen, die in einer hervorgehobenen Farbe angezeigt werden. Auf meinem Terminal ist es blau. Entfernen Sie diese Zeichen und alles wird auf Emacs wieder gut funktionieren.

Ursache:

Das Problem wurde durch einige seltsame Anführungszeichen verursacht, die aus Outlook stammten. Das Lustige ist, dass Emacs dieses Problem erst anzeigt, wenn Sie die Datei erneut öffnen, sodass Sie nur schwer erkennen können, dass Ihre Datei sofort ein Problem aufweist.

Akira
quelle
1
Ich liebe es, wie die Lösung eines Emavs-Problems die Verwendung von Vim beinhaltet. NEHMEN SIE DAS, EMACS!
Aviator45003
1

Ich weiß, dass diese Frage gelöst wurde, aber ich wollte erwähnen, dass Dos2Unix ein praktischer Bestandteil eines Toolkits für den Dateibetrieb zwischen UNIX / DOS / Mac-Computern ist. Es ist ein einfacher befehlsbasierter Ansatz zum Hinzufügen / Entfernen von vom Betriebssystem bevorzugten Zeilenenden.

Mike Fisher
quelle
Emacs kann alle Newline-Varianten verarbeiten, die eine Datei möglicherweise enthält, ohne dass die Datei wie bei Dos2Unix geändert werden muss. Möglicherweise wissenswert für jene armen, gutmütigen Seelen, die jedoch nicht Gottes eigenen Herausgeber benutzen. :)
Aaron Miller
0

Wenn Sie Emacs hauptsächlich in einer DOS / Windows-Umgebung verwenden, sollte Emacs das Zeilenende-System korrekt erkennen und transparent damit umgehen.

Möglicherweise wird ^ M plötzlich in einer Datei angezeigt, weil sie möglicherweise mit einem Skript bearbeitet wurde, das Zeilen mit UNIX-Zeilenenden hinzufügte, und jetzt werden Zeilenenden gemischt.

Sie können diese Zeilen korrigieren, indem Sie ^ M wieder hinzufügen, die Datei speichern, den Puffer beenden und erneut öffnen. Jetzt sollte es normal aussehen und (DOS) als Codierungsmarkierung in der Statuszeile sagen.

Der reguläre Ausdruck, nach dem gesucht werden muss, ist \ ([^^ M] \) $ und wird durch \ 1 ^ M ersetzt. Denken Sie daran, Strg-Q zu verwenden, um die Strg-M-Zeichen zu zitieren.

Ton Haapala
quelle