2010-01-16 13 views
11

Je ne comprends pas le paradigme d'indentation d'Emacs.Impossible de modifier l'indentation par défaut d'Emacs entre les balises HTML

J'ai dans mon fichier .emacs:

(setq-default tab-width 4) 

Si j'appuyez sur TAB dans la situation suivante

    <ul> 
(caret) 
        </ul> 

il finir comme ça

    <ul> 
        (caret) 
        </ul> 

(avec 2 places indentation entre les balises HTML.)

Il devrait se terminer comme ceci:

    <ul> 
         (caret) 
        </ul> 

J'ai tout essayé:

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

J'ai mis tous les Emacs possibles de réglage sur les indentation à 4 mais indentation 2 espace est toujours là.

Des suggestions?

+0

Quel mode utilisez-vous pour modifier le code HTML? –

+0

Je ne suis pas sûr. C'est le mode par défaut que je suppose (je pensais qu'Emacs passe en mode html quand il ouvre un fichier avec l'extension .html) – alexchenco

Répondre

21

La définition de la largeur de la languette n'est pas applicable dans ce scénario, mais je comprends votre confusion; Emacs fournit plusieurs variables liées aux onglets et déterminer la bonne pour un scénario particulier peut prêter à confusion.

This EmacsWiki article provides more details about setting the indentation level for HTML; En général, EmacsWiki est une excellente ressource pour les conseils Emacs. Dans ce cas spécifique, puisque vous utilisez le mode HTML standard d'Emacs (html-mode, tel que défini par sgml-mode), la variable que vous souhaitez définir est sgml-basic-offset. Que variable par défaut à 2, mais vous pouvez le modifier à 4 comme suit:

(setq sgml-basic-offset 4) 

Pour effectuer cette modification spécifique uniquement à html-mode, vous pouvez utiliser le code suivant:

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

Tout cela suppose que vous utilisez Emacs 22 ou plus tard; Si ce n'est pas le cas, la page EmacsWiki à laquelle j'ai lié contient une solution de contournement pour les versions antérieures d'Emacs.

+0

Ça a marché, merci! Je suis curieux de savoir pourquoi: (setq html-basic-offset 4)? – alexchenco

+2

HTML est un dérivé de SGML. La fonctionnalité Emacs pour 'html-mode' est fournie par un paquetage SGML général, ce qui explique pourquoi la variable est' sgml-basic-offset'. C'est pourquoi il est préférable de définir cette variable dans le 'html-mode-hook'; De cette façon, cela n'affectera que les fichiers HTML, et pas les fichiers SGML en général. –

+0

Cela dépend du mode que vous utilisez pour modifier votre code HTML. Il n'y a pas de véritable * défaut * en tant que tel. –