2011-01-28 10 views
5

Me preguntaba si alguien me puede ayudar a minificar mi archivo .emacs.¿Cómo minimizar el archivo de configuración .emacs?

Actualmente lo tengo configurado donde cada idioma que uso tiene una pestaña personalizada, por ejemplo, si tengo un gancho para Java, se vería así.

 
;; Java Hook 
(defun e-java-mode-hook() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (define-key java-mode-map (kbd "") 'java-insert-tab)) 
(defun java-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 
(add-hook 'java-mode-hook 'e-java-mode-hook) 

Y si tuviera que añadir otro idioma como el CSS o JavaScript, me gustaría añadir otro gancho de CSS y JavaScript otro gancho. Entonces, me preguntaba si existe una forma global de establecerlo para que se aplique a todos y cada uno de los idiomas.

Estoy ejecutando actualmente GNU Emacs 23.2.1 en Windows 7.

Respuesta

1

espect.el está haciendo exactamente lo que quiere.

A partir de los documentos:


Este modo hace que sea fácil de configurar los parámetros para cada tampones con un concice y mini-lenguaje extensible. Extrae tareas de selección de configuración comunes, como la comprobación del modo o nombre de archivo, en una sintaxis declarativa simple. Declarar condiciones; ejecuta una función cuando el nuevo buffer coincide con ellos. Esto hace que sea fácil de hacer cosas como activar flyspell-prog-mode para sus lenguajes de programación favoritos , o hacer que todos los buffers en modo texto que terminan en .mkn tengan propiedades especiales.

+0

Gracias por la respuesta, lo probaré y veré cómo funciona, aunque podría ser un poco más complicado para mí. – YTKColumba

2

No estoy seguro de lo que estás tratando de hacer. Si desea establecer la pestaña de ancho de 4 plazas de todo el mundo, entonces usted puede hacer que el uso de la orden para requisitos particulares:

M-x customize-variable tab-width <ret> 

Cualquier cambio que haga a la pestaña de ancho en modifique para requisitos particulares se aplicarán a nivel mundial. Por lo tanto, no necesitará configurarlo individualmente para cada modo con ganchos.

Si tiene diferentes configuraciones que desea aplicar a diferentes modos, necesariamente tendrá que tener un código específico para cada modo en sus archivos .emacs.

De manera más general, parece que está intentando crear sus propios comandos de inserción de pestañas personalizadas: ¿la sangría incorporada no hace lo que necesita? Creo que será más fácil personalizar la configuración de sangría en Emacs que insertar pestañas manualmente donde las desee.

Si no lo ha hecho, echar un vistazo a la sección del manual sobre la sangría y ver si usted puede ser capaz de hacer lo que necesita sin un montón de ganchos adicionales:

Ch rm sangría

(es decir: h -elp, r -ead el manual, m artículo -enu sangría)

o:

(info "(emacs)Indentation") 
+0

Bueno, la mayoría de lo que estoy tratando de hacer es sangrar con 4 pestañas espaciales, a nivel mundial. Si alguna vez ha usado Visual Studio/DreamWeaver anteriormente, quiero configurarlo así. – YTKColumba

+0

Como dije anteriormente, configure los anchos de sus pestañas en Personalizar, y reduzca sus .emacs a una sola línea: (setq indent-tabs-mode t). – Tyler

5

Estoy de acuerdo con Tyler; aunque es un poco complicado, sería mejor a largo plazo si intenta comprender y personalizar las funciones de sangría predeterminadas. El Wiki de Emacs tiene good resources, y hay otros relevant Q&As aquí en Desbordamiento de pila.

Al vincular la tecla de tabulación a insert-tab, significa que pierde completamente el beneficio de los gustos de indent-region y cualquier otro comportamiento inteligente que un modo principal pueda ofrecer.

para responder a sus preguntas específicas sin tener en cuenta, sin embargo:

1) Si está definiendo (java-insert-tab) y (css-insert-tab) y (javascript-insert-tab) etc, y todos ellos hacen exactamente lo mismo ... bueno, espero que usted puede ver que Don de hecho, necesita más de una de esas funciones. Solo déle un nombre más genérico y vuelva a usarlo.

2) (local-set-key ...) hace lo mismo que (define-key (current-local-map) ...), lo que significa que también puede tener una sola función genérica para anular la vinculación de teclas de pestañas, independientemente del modo principal.

(defun my-coding-config() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (local-set-key (kbd "<tab>") 'my-insert-tab)) 

(defun my-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 

continuación, sólo tiene que añadir my-coding-config a cada variable modo de gancho aplicable. Si hay una gran cantidad de ellos, es posible que lo envuelve en una lista como esta:

;; Use my coding hook for all programming modes 
(mapcar 
(lambda (language-mode-hook) 
    (add-hook language-mode-hook 'my-coding-config)) 
'(java-mode-hook 
    javascript-mode-hook 
    css-mode-hook 
    ...)) 

3) Si nos fijamos en Ch vtab-widthRET y lo mismo para indent-tabs-mode, se dará cuenta de que ambos dicen "Automáticamente se convierte en buffer-local cuando se establece de cualquier manera".

Como alternativa a la interfaz personalizada ya mencionada, puede usar (set-default 'indent-tabs-mode t) para establecer el valor predeterminado para dichas variables. En ausencia de un código que establezca un valor local de búfer, todos sus búferes usarán el predeterminado, lo que puede ayudarlo a evitar escribir ganchos de modo innecesarios.

+0

Impresionante, voy a intentarlo y le contaré cómo funciona. – YTKColumba

Cuestiones relacionadas