2010-01-16 11 views
11

Sono confuso riguardo al paradigma di rientro di Emacs.Impossibile modificare il rientro predefinito di Emac tra tag HTML

ho questo nel mio file .emacs:

(setq-default tab-width 4) 

Se premo TAB nella seguente situazione

    <ul> 
(caret) 
        </ul> 

a finire in questo modo

    <ul> 
        (caret) 
        </ul> 

(con 2 posti rientro tra i tag HTML)

Dovrebbe finire così:

    <ul> 
         (caret) 
        </ul> 

Ho provato di tutto:

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

Ho impostato ogni possibile Emacs impostazione circa rientro a 4, ma che indentazione 2 lo spazio è ancora lì.

Qualche suggerimento?

+0

Quale modalità stai utilizzando per modificare HTML? –

+0

Non ne sono sicuro. Immagino che sia la modalità predefinita (ho pensato che Emacs passasse in modalità html quando apriva un file con estensione .html) – alexchenco

risposta

21

L'impostazione della larghezza della scheda non è applicabile in questo scenario, ma comprendo la tua confusione; Emacs fornisce diverse variabili relative alla tabulazione e la determinazione di quella corretta per uno scenario particolare può creare confusione.

This EmacsWiki article provides more details about setting the indentation level for HTML; in generale, EmacsWiki è un'ottima risorsa per i suggerimenti di Emacs.

In questo caso specifico, poiché si utilizza la modalità HTML standard di Emacs (html-mode, come definito da sgml-mode), la variabile che si desidera impostare è sgml-basic-offset. Che le inadempienze variabile a 2, ma si può cambiare a 4 come segue:

(setq sgml-basic-offset 4) 

Per apportare questa modifica specifica solo per html-mode, è possibile utilizzare il seguente codice:

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

Tutto questo presuppone che stai usando Emacs 22 o successivo; in caso contrario, la pagina EmacsWiki a cui sono collegato contiene una soluzione alternativa per le versioni precedenti di Emacs.

+0

Ha funzionato grazie! Sono curioso perché no: (setq html-basic-offset 4)? – alexchenco

+2

HTML è un derivato di SGML. La funzionalità di Emacs per 'html-mode' è fornita da un pacchetto SGML generico, motivo per cui la variabile è' sgml-basic-offset'. Questo è il motivo per cui è meglio impostare quella variabile in 'html-mode-hook'; in questo modo, interesserà solo i file HTML e non i file SGML in generale. –

+0

Dipende dalla modalità in uso per modificare il codice HTML. Non esiste un vero * predefinito * come tale. –

Problemi correlati