Comment changer la largeur d'indentation en mode javascript emacs

120

Je voudrais utiliser 2 espaces pour mes retraits au lieu de 4. Je peux changer le comportement par défaut du mode C en utilisant:

(setq c-basic-offset 2)

Comment changer cela en mode javascript?

mksuth
la source

Réponses:

198

js-indent-level peut être utilisé dans le mode javascript par défaut, qui est inclus par défaut à partir d'emacs 23.2.

(setq js-indent-level 2)

devrait faire ce que vous cherchez. Si vous utilisez une ancienne version d'emacs, vous êtes peut-être en mode java. Je pense que ce mode répond c-basic-offset, mais je me trompe peut-être.

Willi Ballenthin
la source
2
(setq default-tab-width 2) serait le paramètre de largeur de tabulation correspondant pour le mode java
Fergie
En utilisant ce mécanisme, la largeur de l'onglet reste à 8 et donc les tabulations ne sont utilisées que si le niveau de retrait est 4 (2x4 = 8) ou plus. Comment définir la largeur de tabulation sur 2 ou 4 pour que des tabulations au lieu d'espaces soient utilisées? J'ai essayé un tas de paramètres, par exemple (setq tab-width 4) mais en vain. Mon objectif: utiliser la largeur de tabulation 4, et n'utiliser que des caractères de tabulation (pas d'espaces comme substitut).
jdp
jdp: Essayez (defun my-javascript-mode-hook () (setq indent-tabs-mode t tab-width 4 js-indent-level 4)) (add-hook 'javascript-mode-hook 'my-javascript-mode-hook).
phils
Utilisez js-mode-hook, comme ceci:(defun my-js-mode-hook () (setq indent-tabs-mode t tab-width 4 js-indent-level 4)) (add-hook 'js-mode-hook 'my-js-mode-hook)
skeltoac
6
Est-ce documenté quelque part? Existait-il un moyen de trouver ces informations sans stackoverflow? J'ai regardé en M-x hmode js, mais je n'ai rien trouvé là-bas.
Charles Holbrow
75

J'aurais aimé que quelqu'un m'ait parlé de Custom beaucoup plus tôt! Peut-être que cela aidera un autre simple mortel comme moi;)

Invoquer personnalisé:

M-x customize

Ensuite, choisissez «Programmation», puis «Langues», puis sélectionnez une langue / un mode à personnaliser. Modifiez les options comme bon vous semble. Une fois terminé, choisissez «Enregistrer pour la session actuelle» ou «Enregistrer pour les sessions futures».

wprl
la source
17

Si vous utilisez le mode js2 (qui est plus puissant à mon humble avis), la commande est:

(setq-default js2-basic-offset 2)

La source.

metakermit
la source
11

Vous pouvez également configurer emacs pour utiliser des espaces au lieu des tabulations

(setq-default indent-tabs-mode nil)
Tyler
la source
Ceci est plus un commentaire qu'une réponse réelle. Gagnez plus de réputation pour pouvoir commenter.
jcubic
2

Dans mon fichier javascript.el (/ usr / share / emacs / site-lisp) j'ai trouvé

javascript-indent-niveau 4

Donc, si vous utilisez le même mode lisp, vous pouvez le changer en exécutant

(setq javascript-indent-level 2)
Helge
la source
2

Vous pouvez aussi utiliser

M-x customize-variable

et tapez

js-indent-level

( js-[TAB] affiche une liste d'options). Puis changez le Js Indent Levelcomme vous le souhaitez et cliquez [State:]et enregistrez.

kwarnke
la source
2

Utiliser EditorConfig pourrait également être une bonne idée. Et bien sûr, Emacs avait un mode pour lui editorconfig-emacs .

Il est également disponible dans le gestionnaire de packages ( M-x package-list-packages) via Melpa ou Marmalade.

hs0ucy
la source
2

Si vous souhaitez le modifier par fichier, placez-le en haut de votre fichier:

// -*- mode: js; js-indent-level: 2; -*-
MatthewD
la source
0

Aucune de ces solutions n'a fonctionné pour moi après la mise à niveau vers Emacs 26 (j'avais déjà js-indent-leveldéfini sur 2 mais la largeur de mon onglet est revenue à 8), mais ce qui a fonctionné était de définir la tab-widthvariable sur 2, ce qui semble remplacer l'ancienne default-tab-widthvariable.

J'ai trouvé cela en M-x customizecherchant tab width.

Malvineous
la source