2009-11-04 19 views
16

che ho avuto queste funzioni nel mio file .emacs.el da anni:Come configurare GNU Emacs per scrivere file formattati UNIX o DOS per impostazione predefinita?

(defun dos2unix() 
    "Convert a DOS formatted text buffer to UNIX format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-unix nil)) 

(defun unix2dos() 
    "Convert a UNIX formatted text buffer to DOS format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-dos nil)) 

Queste funzioni mi permettono di passare facilmente tra i formati, ma non sono sicuro come configurare Emacs per scrivere in un particolare formato di default indipendentemente dalla piattaforma che sto usando. Come è ora, quando corro su Windows, Emacs salva in formato Windows; quando corro in UNIX/Linux, Emacs salva in formato UNIX.

Vorrei istruire Emacs a scrivere in formato UNIX indipendentemente dalla piattaforma su cui sono in esecuzione. Come posso fare questo?

Dovrei forse aggiungere qualche hook in modalità testo che chiama una di queste funzioni? Ad esempio, se sono su Windows, allora chiamo dos2unix quando trovo un file di testo?

risposta

23

Ho un mucchio di questi nel mio .emacs:

(setq-default buffer-file-coding-system 'utf-8-unix) 
(setq-default default-buffer-file-coding-system 'utf-8-unix) 
(set-default-coding-systems 'utf-8-unix) 
(prefer-coding-system 'utf-8-unix) 

Non so che è giusto, io sono solo superstiziosa.

+2

Ha! È roba buona. +1 per cinture e bretelle! –

+6

'setq-default' not' set-default' è il modo corretto per modificare le variabili sopra. Altrimenti dovresti citare il nome della variabile. – e40

+0

Corretto il setq-default –

11

Ho risposto alle domande e alle risposte, ma ho impiegato un paio di minuti a migliorare le informazioni, quindi aggiungerò.

Innanzitutto, ho controllato documentazione su ciascuna variabile e funzione in risposta user181548, da (primo taglio e incollare in Emacs, allora) mettendo cursore su ciascuna, e digitando C-h v RET e C-h f RET rispettivamente.

Questo ha suggerito che potrei solo bisogno

(prefer-coding-system 'utf-8-unix) 

Sperimentando con le altre linee non sembrano cambiare preesistenti codifiche tampone (digitando C-h C RET RET per controllare (describe-coding-system) e g ogni volta per aggiornare), così ho omesso le altre linee e ha fatto una chiave vincolante per modificare rapidamente qualsiasi file vecchi che erano ancora DOS, cioè,

(defun set-bfr-to-8-unx() 
    (interactive) 
    (set-buffer-file-coding-system 
    'utf-8-unix) 
) 
(global-set-key (kbd "C-c u") 
     'set-bfr-to-8-unx 
     ) 

per i curiosi, per scoprire il 3 ° e 4 ° linea di funzione di cui sopra, 01.234., ho usato C-x RET f RET per modificare manualmente la codifica del buffer corrente, quindi M-x command-history RET per vedere come quelle chiavi si traducono in codice.

Ora forse il mio commit di git smetterà di lamentarsi dei CR.

+0

BTW, una macro da tastiera può essere utile per cambiare le codifiche per un insieme di file (per esempio, da dired). Le moderne combinazioni di tasti per questo possono essere trovate su https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro. (Invece di 'Cx (' ecc., Possiamo usare 'F3' e' F4'.) –

+0

Votato per rimuovere la ridondanza: quella linea era tutto ciò che era necessario per la codifica 'utf-8-unix' e' LF' finali. Ho pensato di mettere anche '(set-language-environment" UTF-8 ")' basato su [questo articolo] (http://ergoemacs.org/emacs/emacs_encoding_decoding_faq.html), ma ho deciso di non farlo ne ho bisogno. Grazie! – legends2k

Problemi correlati