Rendre le mode Web toujours en retrait avec des espaces

10

J'utilise emacs en mode web , et la tabulation dans les fichiers JS semble agir étrangement.

La tabulation est définie sur 2 espaces en retrait, mais lorsque le retrait atteint 8 espaces, le mode Web les transforme en onglet, puis continue de tabuler 2 espaces jusqu'à ce qu'il atteigne 8 autres, et les convertit en un autre onglet, etc.

Puis-je empêcher cela de se produire et dire à emacs / web-mode de ne mettre en retrait que les espaces?

ÉDITER:

Voici un court exemple de fonction imbriquée:

(function() {
  function() {
    function() {
      function() {
    function() {
      // Indenting problem.
    }
      }
    }
  }
})()

Il est évident que ça se passe bien dans Emacs, mais vous pouvez voir le problème d'indentation ici.

Je noterai ici que cela se produit également en mode javascript.

dieuwe
la source
1
Est-ce spécifique au mode Web? Ou cela se produit-il quelque part?
Malabarba
Cela ne se produit qu'en mode Web, tout le reste des onglets avec des espaces indéfiniment.
dieuwe
Désolé, le mode javascript fait également la même chose. Mais ce sont juste ces deux-là.
dieuwe
Lequel javascript-modeutilisez-vous, celui intégré? Cela se produit-il également lors de l'indentation du code HTML web-mode?
dgtized
Veuillez publier le contenu de votre fichier init. Emacs utilise un onglet pour 8 espaces par défaut, donc il doit y avoir quelque chose dans votre fichier init pour le désactiver pour la plupart des modes.
Gilles 'SO- arrête d'être méchant'

Réponses:

10

En général, si vous souhaitez que l'indentation utilise uniquement des espaces, je vous recommande de personnaliser:

(setq-default indent-tabs-mode nil)

Cela force l'indentation à utiliser des espaces et aucun onglet. Je ne sais pas si web-modeutilise les méthodes régulières pour l'indentation, donc il peut ne pas respecter cela.

Pouvez-vous donner un exemple de fichier à démontrer?

dgtized
la source
3
Ont ajouté un exemple à la question. L'ajout (setq indent-tabs-mode nil)ne semble rien changer aux deux web-modeet javascript-mode.
dieuwe
3
Je pense que vous devriez utiliser setq-defaultcar indent-tabs-modeest buffer-local.
nperson325681
@progo D'accord, cela a fonctionné. Merci beaucoup.
dieuwe
1
Est-il possible de mettre en retrait uniquement avec des tabulations? J'ai essayé différents paramètres, mais il ne se met en retrait qu'avec des tabulations / espaces mixtes.
Dfr
1
@Dfr Vous devez ajouter (setq-default indent-tabs-mode t)votre.emacs
fxbois
3

Veuillez essayer ce code dans votre fichier de configuration emacs pour forcer le retrait en mode Web. Je l'ai référé depuis la page d'accueil en mode Web.

(require 'web-mode)
(defun my-web-mode-hook ()
  "Hooks for Web mode."
  (setq web-mode-markup-indent-offset 2)
)
(add-hook 'web-mode-hook  'my-web-mode-hook)
YulongNiu
la source
Est-ce que cela fonctionnerait aussi? (add-hook 'web-mode-hook (lambda () (setq web-mode-markup-indent-offset 2)))
Andrew Lamarra