By default Emacs uses tab instead of spaces for indentation, so I changed these 2 variables to change this behavior,

  (setq-default indent-tabs-mode nil)        ;; Disable indent with tabs
  (setq default-tab-width 4)                 ;; Set default indent width

It did change the indent mode from tab to space, but if I press RET, when I am in a programming buffer C++ for example, to enter a new line, I get 2 spaces of indentation instead of 4. How do I set this indentation level to 4 be default globally.

Also when when I am editing a line for example, it auto shift the line back to 2 space of indentation, for some reason, and also re-formats how I wrote the code, for example, I usually write like this,

if (true)
    // 4 spaces for indentation.

If I try to edit or add something, it pushes the lines back to 2 spaces of indentation and also sometimes re-formats the brackets position,

if (true) {
  // 2 spaces for indentation.

I am constantly fighting with this thing, and it gets annoying very quickly sometimes. As far as I know, I did not install any formatting package.

  • I'm guessing this question is a duplicate, but I don't have time to look for it now. Hopefully someone will find it, if so, and then close this as a dup.
    – Drew
    Jun 19 at 13:38

There is no global setting for the indentation width. Instead, each mode has it’s own setting. In c-mode it is called c-basic-offset. In js2-mode it is js2-basic-offset. For lisp-mode there are two: lisp-body-indent and lisp-indent-offset.

You’re probably using c-mode for editing your C++ files, so you should customize the c-basic-offset variable. Run M-x customize-variable then enter the variable name that you would like to change.

  • I'm using c++-mode to edit C++ files. And the value for c-basic-offset is set to set-from-style. So I just change this to 2 or 4, whatever level of spaces I need? There is no c++-basic-offset it seems like.
    – apoorv569
    Jun 19 at 9:59
  • Oh, right. For c-mode (and therefore for a number of modes derived from it, such as java, awk, csharp, and c++ modes) there is also a more complicated style system that lets you pick where your curly braces go, and other things. You can change the current style by customizing c-default-style; it takes values that are defined in c-style-alist. Use C-h v to look at the help for all of these variables to find out more.
    – db48x
    Jun 19 at 10:14
  • I think the indentation problem is fixed now I add custom-set-variables '(c-basic-offset 4)) to my init.el file, and it seems to have fixed it. But the formatting problem is still there.
    – apoorv569
    Jun 19 at 16:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.