it-swarm.com.de

^ M in Emacs verstecken

Manchmal muss ich Protokolldateien lesen, in deren Zeilenenden sich ^ M (control-M) befindet. Ich kann eine globale Ersetzung durchführen, um sie loszuwerden, aber dann wird etwas mehr in der Protokolldatei protokolliert, und natürlich kommen alle zurück.

Das Festlegen der Kodierung für das Zeilenende im Unix-Stil oder im DOS-Stil scheint keinen großen Unterschied zu machen (aber der Unix-Stil ist meine Standardeinstellung). Ich verwende das undecided- (Unix | dos) -Codiersystem.

Ich befinde mich unter Windows und lese Log-Dateien, die von log4net erstellt wurden (obwohl log4net offensichtlich nicht die einzige Ursache für diesen Ärger ist).

Irgendwelche Hinweise?

54
Russell
(defun remove-dos-eol ()
  "Do not show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))

Lösung von Johan Bockgård. Ich habe es gefunden hier .

72
binOr

Moderne Versionen von Emacs wissen, wie sowohl mit UNIX- als auch mit DOS-Zeilenenden umgegangen wird. Wenn ^ M in der Datei angezeigt wird, bedeutet dies, dass in der Datei eine Mischung aus beiden vorliegt. Bei einer solchen Mischung wechselt emacs standardmäßig in den UNIX-Modus, sodass die ^ Ms sichtbar sind. Die eigentliche Lösung besteht darin, das Programm zu reparieren, das die Datei erstellt, sodass konsistente Zeilenenden verwendet werden.

19
Edric

Wie wäre es mit?

C-x RET c dos RET C-x C-f FILENAME RET

Ich habe eine Datei erstellt, die zwei Zeilen hat, wobei die zweite einen Wagenrücklauf hat. Emacs öffnete die Datei in Unix-Codierung, und das Wechseln des Codierungssystems bewirkt nichts. Der universal-coding-system-argument oben funktioniert jedoch.

6
ashawley

Wenn Sie die Protokolldateien anzeigen und die ^ M-Werte einfach ausblenden möchten, anstatt sie tatsächlich zu ersetzen, können Sie dazu Drew Adams highlight extension verwenden. 

Sie können entweder Elisp-Code schreiben oder ein Tastaturmakro erstellen, um die folgenden Schritte auszuführen

select the whole buffer
hlt-highlight-regexp-region
C-q C-M
hlt-hide-default-face

Dadurch werden zuerst die ^ M's hervorgehoben und dann ausgeblendet. Wenn du sie zurück haben willst, benutze `hlt-show-default-face '

4
justinhj

Edrics Antwort sollte mehr Aufmerksamkeit erhalten. Die Lösung von Johan Bockgård bezieht sich auf die Beschwerde des Posters, insofern sie die Ms unsichtbar macht, das aber nur das zugrunde liegende Problem überdeckt und eine weitere Vermischung von Unix- und DOS-Zeilenenden anregt.

Die richtige Lösung wäre, einen globalen M-x replace-regexp zu machen, um all - Zeilenenden zu DOS-Endungen (oder Unix, je nach Fall) zu machen. Schließen Sie dann die Datei und öffnen Sie sie erneut (nicht sicher, ob M-x revert-buffer ausreichend ist), und die ^ Ms sind entweder alle unsichtbar oder alle sind verschwunden.

3
SABBATINI Luca

Ich glaube, Sie können das Zeilen-Codierungssystem, das die Datei verwendet, auf das Unix-Format ändern 

C-x RET f UNIX RET

Wenn Sie das tun, sollte sich die Moduszeile ändern, um das Wort "(Unix)" hinzuzufügen, und alle ^ Ms sollten verschwinden.

3
T.E.D.

Sie können den Anzeigetabelleneintrag des Control-M-Zeichens (^M) ändern, um es als Leerzeichen darzustellen oder sogar ganz zu löschen (leer). Den Code in der Bibliothek pp-c-l.el ( Pretty Control-L ) finden Sie hier. Es zeigt ^L Zeichen beliebig an.

Editiert: Hoppla, ich habe gerade bemerkt, dass @binOr diese Methode bereits erwähnt hat.

2
Drew

Fügen Sie dies in Ihre .emacs ein:

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))

Jetzt können Sie einfach dos2unix aufrufen und alle ^M-Zeichen entfernen.

2
sudeepdino008

was ist mit dos2unix, unix2dos (jetzt tofrodos )?

0
Massagran

die Antwort von sudeepdino008 funktionierte nicht für mich (ich konnte seine Antwort nicht kommentieren, also musste ich meine eigene Antwort hinzufügen.). 

Ich konnte es mit diesem Code beheben:

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward (string ?\C-m) nil t) (replace-match "")))
0
RMK

Wenn Sie in Gnus ^Ms in empfangenen E-Mails finden, können Sie W c (wash CRs) oder verwenden 

(setq gnus-treat-strip-cr t)
0
Brady Trainor

Wie schon bei binOr gesagt, füge dies zu% APPDATA% .emacs.d\init.el unter Windows hinzu oder wo immer sich deine Konfiguration befindet.

;; Windows EOL
(defun hide-dos-eol ()
  "Hide ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M []))

(defun show-dos-eol ()
  "Show ^M in files containing mixed UNIX and DOS line endings."
  (interactive)
  (setq buffer-display-table (make-display-table))
  (aset buffer-display-table ?\^M ?\^M))

(add-hook 'text-mode-hook 'hide-dos-eol)