ChatGPT解决这个技术问题 Extra ChatGPT

How to change the indentation width in emacs javascript mode

I'd like to use 2 spaces for my indents instead of 4. I can change the default behavior of C mode using:

(setq c-basic-offset 2)

How do I change this in javascript mode?


W
Willi Ballenthin

js-indent-level can be used in the default javascript-mode, which is included by default starting in emacs 23.2.

(setq js-indent-level 2)

should do what you're looking for. If you're using an older version of emacs, you may be in java-mode. I think this mode responds to c-basic-offset, however I may be wrong.


(setq default-tab-width 2) would be the corresponding tab width setter for java-mode
Using this mechanism the tab width remains at 8 and so tabs are only used if indent level is 4 (2x4=8) or more. How do you set tab width to 2 or 4 so that tabs instead of spaces are used? I've tried a bunch of settings, e.g. (setq tab-width 4) but to no avail. My goal: use tab width 4, and only use tab characters (not spaces as a substitute).
jdp: Try (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).
Use js-mode-hook, like so: (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)
Is this documented anywhere? Was there a way of finding this information without stackoverflow? I looked in M-x h from js-mode, but couldn't find anything there.
w
wprl

I wish someone had told me about Custom a lot sooner! Perhaps this will help another mere mortal like me ;)

Invoke Custom:

M-x customize

Then, choose "Programming," and then "Languages," and then select a language/mode to customize. Edit the options as you see fit. When done, choose either "Save for current session" or "Save for future sessions."


m
metakermit

If you're using js2-mode (which is more powerful IMHO), then the command is:

(setq-default js2-basic-offset 2)

Source.


h
hjpotter92

You might also want to set emacs to use spaces instead of tabs

(setq-default indent-tabs-mode nil)

This is more a comment then actual answer. Earn more reputation to be able to comment.
k
kwarnke

You can also use

M-x customize-variable

and type

js-indent-level

(js- [TAB] shows a list of options). Then change the Js Indent Level as wanted and click [State:] and save.


An alternative approach might be using M-x describe-variable + click on "customize".
H
Helge

In my javascript.el file (/usr/share/emacs/site-lisp) I found

javascript-indent-level 4

So if you are using the same lisp-mode you can change it by running

(setq javascript-indent-level 2)

佚名

Using EditorConfig could be a good idea too. And of course, Emacs had a mode for it editorconfig-emacs.

It's also available in the package manager (M-x package-list-packages) through Melpa or Marmalade.


M
MatthewD

If you want to change it on a per-file basis, put this at the top of your file:

// -*- mode: js; js-indent-level: 2; -*-

M
Malvineous

None of these solutions worked for me after upgrading to Emacs 26 (I already had js-indent-level set to 2 but my tab width went back to 8), but what did work was setting the tab-width variable to 2, which seems to replace the old default-tab-width variable.

I found this in M-x customize by searching for tab width.