2010-01-16 12 views
11

Estoy confundido con el paradigma de sangría de Emacs.No se puede cambiar la sangría predeterminada de Emacs entre las etiquetas HTML

tengo esto en mi archivo .emacs:

(setq-default tab-width 4) 

Si presiona el tabulador en la siguiente situación

    <ul> 
(caret) 
        </ul> 

que terminó así

    <ul> 
        (caret) 
        </ul> 

(con 2 espacios indentación entre las etiquetas HTML.)

Debe terminar así:

    <ul> 
         (caret) 
        </ul> 

He intentado todo:

(setq-default tab-width 4) 
(setq-default indent-tabs-mode t) 
(setq tab-stop-list '(4 8 12 16)) 

he fijado cada posible configuración de Emacs acerca de sangría para 4, pero dicha escotadura 2 El espacio es todavía allí.

¿Alguna sugerencia?

+0

¿Qué modo está utilizando para editar HTML? –

+0

No estoy seguro. Es el modo predeterminado, supongo (pensé que Emacs cambia al modo html cuando abre un archivo con la extensión .html) – alexchenco

Respuesta

21

Establecer el ancho de la pestaña no es aplicable en este escenario, pero entiendo su confusión; Emacs proporciona varias variables relacionadas con las pestañas y determinar la correcta para un escenario particular puede ser confuso.

This EmacsWiki article provides more details about setting the indentation level for HTML; en general, EmacsWiki es un gran recurso para las sugerencias de Emacs.

En este caso específico, dado que está utilizando el modo HTML estándar de Emacs (html-mode, como se define en sgml-mode), la variable que desea establecer es sgml-basic-offset. A restaurar los valores de variables a 2, pero puede cambiarlo a 4 de la siguiente manera:

(setq sgml-basic-offset 4) 

Para realizar este cambio específico sólo a html-mode, puede utilizar el siguiente código:

(add-hook 'html-mode-hook 
    (lambda() 
    ;; Default indentation is usually 2 spaces, changing to 4. 
    (set (make-local-variable 'sgml-basic-offset) 4))) 

Todo esto supone que estás usando Emacs 22 o posterior; si ese no es el caso, la página de EmacsWiki que he vinculado contiene una solución alternativa para las versiones anteriores de Emacs.

+0

¡Funcionó gracias! Tengo curiosidad por qué no: (setq html-basic-offset 4)? – alexchenco

+2

HTML es un derivado de SGML. La funcionalidad de Emacs para 'html-mode' es proporcionada por un paquete SGML de propósito general, por lo que la variable es' sgml-basic-offset'. Es por eso que es mejor establecer esa variable en 'html-mode-hook'; de esta forma, solo afectará a los archivos HTML, y no a los archivos SGML en general. –

+0

Esto dependería del modo que esté utilizando para editar su código HTML. No hay real * default * como tal. –

Cuestiones relacionadas