Innehållsförteckning RecentChanges News ElispArea HowTo Problems Suggestions

NoTabs

If you want to use spaces instead of tabs when indenting, put the following in your .emacs file:

    (setq-default indent-tabs-mode nil)

You may also customize the ‘indent-tabs-mode’ variable instead, obviously. If you want to remove tabs in an existing file, mark the whole buffer using C-x h and use M-x untabify. (M-x tabify does the opposite …)

Discussion on whether this is a good idea: TabsAreEvil (or not).

If you wish to change the amount of spaces that the Tab key inserts, check out the TabStopList page. Do not confuse this with tab-width, which is only good for displaying existing tabs in files!

The tab-width variable tells Emacs how wide a tab is (more precisely, the distance between tab stops). You might want to set it to something other than 8 before calling M-x untabify.

So How Do I Insert a Tab If I Really Have To?

Yes, of course you agree that TabsAreEvil. But you just have to indulge yourself a tab from time to time – perhaps to create a file in some required format. Whaddya do?

C-q’ to the rescue! Don’t forget it: ‘C-q’ says “insert the next character, whatever it is” (command quoted-insert).

So, ‘C-q <tab>’ does the trick. – DrewAdams

Smart inference of indentation style

I prefer NoTabs, but sometimes I work on a project that does use tab indentation. I don’t want to cause problems for these source files. As a result, I use the following snippit to default to no tabs, but to use tabs if that’s what a pre-existing file is primarily using for indentation:

    (defun how-many-region (begin end regexp &optional interactive)
      "Print number of non-trivial matches for REGEXP in region.                    
    Non-interactive arguments are Begin End Regexp"
      (interactive "r\nsHow many matches for (regexp): \np")
      (let ((count 0) opoint)
        (save-excursion
          (setq end (or end (point-max)))
          (goto-char (or begin (point)))
          (while (and (< (setq opoint (point)) end)
                      (re-search-forward regexp end t))
            (if (= opoint (point))
                (forward-char 1)
              (setq count (1+ count))))
          (if interactive (message "%d occurrences" count))
          count)))
    (defun infer-indentation-style ()
      ;; if our source file uses tabs, we use tabs, if spaces spaces, and if        
      ;; neither, we use the current indent-tabs-mode                               
      (let ((space-count (how-many-region (point-min) (point-max) "^  "))
            (tab-count (how-many-region (point-min) (point-max) "^\t")))
        (if (> space-count tab-count) (setq indent-tabs-mode nil))
        (if (> tab-count space-count) (setq indent-tabs-mode t))))

[in my c-mode hook, or whatever other mode I want to have smart indentation]

    (setq indent-tabs-mode nil)
    (infer-indentation-style)

You might also want to check out GuessStyle


CategoryIndentation