Domanda

Sto scrivendo un file di configurazione e devo definire se il processo prevede un file in formato Windows o un file in formato unix. Ho una copia del file previsto: esiste un modo per verificare se utilizza \ n o \ r \ n senza uscire da emacs?

È stato utile?

Soluzione

Se si dice (DOS) sulla modeline quando si apre il file su Unix, le terminazioni di riga sono in stile Windows. Se viene visualizzato (Unix) quando si apre il file su Windows, le terminazioni di riga sono in stile Unix.

Dal manuale di Emacs 22.2 (Nodo: Line Mode):

  

Se il file del buffer utilizza   avanzamento riga di ritorno a capo, i due punti   cambia in una barra rovesciata ('\') o   '(DOS)', a seconda del funzionamento   sistema. Se il file utilizza solo   ritorno a capo, l'indicatore dei due punti   cambia in una barra   ('/') o '(Mac)'. Su alcuni sistemi,   Emacs visualizza '(Unix)' invece di   due punti per i file che utilizzano newline come   il separatore di riga.

Ecco una funzione che & # 8211; Penso & # 8211; mostra come controllare da elisp ciò che Emacs ha determinato essere il tipo di terminazioni di linea. Se sembra eccessivamente complicato, forse lo è.

(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")))))

Altri suggerimenti

Se vai in modalità hexl (M-x hexl-mode), dovresti vedere i byte di terminazione della linea.

Apri il file in emacs usando find-file-letteralmente. Se le linee hanno i simboli ^ M alla fine, si aspetta un file di testo in formato Windows.

La seguente funzione Elisp restituirà nil se nessun terminatore " \ r \ n " appare in un file (altrimenti restituisce il punto della prima occorrenza). Puoi inserirlo nel tuo .emacs e chiamarlo con 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))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top