2009-11-04 20 views
16

que he tenido estas funciones en mi archivo .emacs.el durante años:¿Cómo configurar GNU Emacs para escribir archivos con formato UNIX o DOS de forma predeterminada?

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

Estas funciones me permiten cambiar fácilmente entre formatos, pero no estoy seguro de cómo configurar Emacs para escribir en un formato particular de forma predeterminada independientemente de la plataforma que estoy usando. Tal como está ahora, cuando ejecuto Windows, Emacs guarda en formato Windows; cuando corro en UNIX/Linux, Emacs guarda en formato UNIX.

Me gustaría indicar a Emacs que escriba en formato UNIX, independientemente de la plataforma en la que estoy ejecutando. ¿Cómo hago esto?

¿Debo agregar un gancho de modo de texto que llame a una de estas funciones? Por ejemplo, si estoy en Windows, entonces llamo al dos2unix cuando encuentro un archivo de texto.

Respuesta

23

Tengo un montón de estos en mi .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) 

No sé lo que es correcto, sólo soy supersticioso.

+2

¡Ja! Eso es bastante bueno. +1 para cinturones y tirantes! –

+6

'setq-default' not' set-default' es la forma correcta de cambiar las variables anteriores. De lo contrario, necesitarías citar el nombre de la variable. – e40

+0

Corregido el setq-defaults –

11

Elegí la pregunta y la respuesta, pero pasé un par de minutos posiblemente mejorando la información, así que lo agregaré.

Primero, comprobé la documentación de cada variable y funcionó en la respuesta del usuario181548, (cortando y pegando primero en Emacs, luego) colocando el cursor sobre cada una, y escribiendo C-h v RET y C-h f RET respectivamente.

Esto sugiere que sólo puede ser que necesite

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

Experimentando con las otras líneas no parecía cambiar codificaciones tampón pre-existentes (tecleando C-h C RET RET para comprobar (describe-coding-system) y g cada vez para refrescar), por lo que omite las otras líneas e hice una para cambiar rápidamente los archivos antiguos que aún estaban DOS, es decir la asignación de teclas,

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

para los curiosos, para descubrir la tercera y cuarta línea de la función anterior, (set-buffer-file-coding-system 'utf-8-unix), usé C-x RET f RET para cambiar manualmente la codificación del búfer en uso, luego M-x command-history RET para ver cómo esas claves se traducen al código.

Ahora quizás mi git commit dejará de lamentarse por los CR.

+0

BTW, una macro de teclado puede ser útil para cambiar las codificaciones de un conjunto de archivos (por ejemplo, desde dired). Las claves modernas para esto se pueden encontrar en https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro. (En lugar de 'Cx (' etc, podemos usar 'F3' y' F4'.) –

+0

Upvoted para eliminar la redundancia; esa línea era todo lo que se necesitaba para la codificación 'utf-8-unix' y' LF' finales. Pensé que adicionalmente pondría '(set-language-environment" UTF-8 ")' basado en [este artículo] (http://ergoemacs.org/emacs/emacs_encoding_decoding_faq.html), pero decidí que no lo necesito. Gracias! – legends2k

Cuestiones relacionadas