1

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.

9
  • 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
  • The "sometimes re-formats the brackets position" issue is not a thing that Emacs does by default (to my knowledge). Although you say "As far as I know, I did not install any formatting package." I can only presume that you have unknowingly done exactly this. It's pretty easy to confirm -- just run emacs -Q and confirm the standard behaviour. Assuming it's your own config, you can use the recursive bisection technique to quickly narrow down which piece of your config is responsible.
    – phils
    Nov 16 at 14:14
  • @phils I think the default c-default-style is set to "gnu" which indents the braces, as stated here - EmacsWiki I have now switched to linux style, but I don't see any difference. At this point I am mostly manually editing brace position every time. I like how doom-emacs has the perfect c-style that I prefer, wish they had a package to set it up.
    – apoorv569
    Nov 17 at 22:53
  • Indentation can certainly happen automatically, but the "move a bracket from the start of the current line to end of the previous line" issue is not something that I've ever experienced with Emacs, so regardless of the chosen style I don't think that particular kind of reformatting is standard behaviour.
    – phils
    Nov 17 at 23:40
  • If you are still having problems with the indentation levels, though, that's definitely fixable.
    – phils
    Nov 17 at 23:41
1

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.

3
  • 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.