138

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?

9 Answers 9

227

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.

Sign up to request clarification or add additional context in comments.

9 Comments

(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.
|
91

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."

Comments

17

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

(setq-default js2-basic-offset 2)

Source.

Comments

12

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

(setq-default indent-tabs-mode nil)

1 Comment

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

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.

1 Comment

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

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)

Comments

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.

Comments

2

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; -*-

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.