2009-02-10 8 views
11

Je suis un tab person. Sauf si je travaille sur un projet qui utilise déjà des espaces, j'utilise des onglets. Je fais surtout du php et du html. J'ai des onglets en PHP qui fonctionnent bien. Mais je ne peux pas comprendre comment avoir le mode html utilise des onglets au lieu de deux espaces.Onglets en mode HTML dans Emacs

Voici ce que j'ai jusqu'à présent:

(setq c-default-style "python") 
(setq-default c-basic-offset 4 
       tab-width 4 
       indent-tabs-mode t) 

Que puis-je mettre en sorte que le mode html utilisera les onglets?

Répondre

26
(add-hook 'html-mode-hook 
      (lambda() 
      (setq sgml-basic-offset 4) 
      (setq indent-tabs-mode t))) 

Cela fonctionne parce que quand indent-tabs-mode est t, la logique de retrait par défaut Emacs remplace les espaces avec des onglets chaque fois qu'il peut tout en préservant la colonne appropriée pour compenser indentation. Ainsi, par exemple si votre code est censé être compensé par quatre caractères par niveau de retrait (c.-à-sgml-basic-offset est 4, comme ci-dessus), votre code doit être indenté deux niveaux de profondeur, et il y a quatre colonnes par niveau d'indentation, puis Emacs calcule que si il indente avec deux onglets et zéro espace, ce qui se traduira par le décalage de la colonne appropriée.

Cela signifie également, cependant, que ce qui précède ne fonctionnera pas tout à fait correctement si vous avez joué avec votre tab-width. Par exemple, si vous le définissez sur 8 et que vous indentez un niveau de profondeur, Emacs calcule que même s'il n'insère qu'un seul onglet, le décalage de colonne visuel (8) sera plus grand que le décalage souhaité (4). Donc, il va insérer quatre espaces à la place. Essayez de régler sgml-basic-offset à la même chose que votre tab-width.

+1

Puis-je faire quelque chose de mal? Ce code n'a aucun effet pour moi. Exécution d'Emacs 22.3.1 btw – Echo

+0

Utilisez-vous le mode html fourni avec emacs ou un autre? –

+0

Juste le mode html par défaut fourni avec emacs. – Echo

2

En fait, indent-tabs mode devrait probablement t par défaut.

Essayez M-i, juste pour une alouette. Cela devrait insérer un caractère de tabulation. Ce n'est pas une solution géniale, mais cela pourrait fonctionner à la rigueur.

AUSSI, comment avez-vous tester pour l'espace vs onglet? se déplacer à travers elle? ou le supprimer? vous pourriez avoir «backward-delete-char-untabify» en élevant la tête.

+0

Ouais, j'avais déjà essayé de tuer et de rouvrir le tampon et de redémarrer emacs. – Echo

Questions connexes