Frage

Ich schreibe eine Konfigurationsdatei und muss definieren, ob der Prozess eine Windows -Formatdatei oder eine Unix -Formatdatei erwartet. Ich habe eine Kopie der erwarteten Datei - gibt es eine Möglichkeit, wie ich prüfen kann, ob sie n oder r n verwendet, ohne EMACs zu verlassen?

War es hilfreich?

Lösung

Wenn (DOS) auf dem Modeline beim Öffnen der Datei auf UNIX steht, sind die Zeilenende im Windows-Stil. Wenn es (UNIX) heißt, wenn Sie die Datei unter Windows öffnen, sind die Zeilenende im Unix-Stil.

Aus dem EMACS 22.2 Handbuch (Knoten: Moduszeile):

Wenn in der Datei des Puffer eine Wagenrückkehr-Linefeed verwendet, wechselt der Dickdarm je nach Betriebssystem entweder zu einem Backslash ('') oder '(dos)'. Wenn die Datei nur die Wagenrückkehr verwendet, ändert sich der Dickdarmindikator entweder in einem Vorwärtsschräg ('/') oder '(mac)'. Auf einigen Systemen zeigt EMACS '(UNIX)' anstelle des Dickdarms für Dateien an, die Newline als Zeilenabscheider verwenden.

Hier ist eine Funktion, die - meiner Meinung nach - zeigt, wie Sie von Elisp überprüfen können, was EMACs als die Art der Zeilenende entschieden hat. Wenn es außerordentlich kompliziert aussieht, ist es vielleicht.

(defun describe-eol ()
  (interactive)
  (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
    (when (vectorp eol-type)
      (setq eol-type (coding-system-eol-type (aref eol-type 0))))
    (message "Line endings are of type: %s"
             (case eol-type
               (0 "Unix") (1 "DOS") (2 "Mac") (t "Unknown")))))

Andere Tipps

Wenn Sie in HEXL-Modus (MX HEXL-Modus) gehen, sollten Sie die Bytes der Linienbeendigung sehen.

Öffnen Sie die Datei in EMACs mit Find-File-Literal. Wenn Zeilen am Ende Symbole haben, erwartet sie eine Textdatei mit Windows -Format.

Die folgende ELISP -Funktion wird zurückkehren nil Wenn nein "\r\n" Terminatoren erscheinen in einer Datei (ansonsten gibt es den Punkt des ersten Ereignisses zurück). Sie können es in Ihre geben .emacs und ruf es mit M-x check-eol.

(defun check-eol (FILE)
  (interactive "fFile: ")
  (set-buffer (generate-new-buffer "*check-eol*"))
  (insert-file-contents-literally FILE)
  (let ((point (search-forward "\r\n")))
    (kill-buffer nil)
    point))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top