Emacs Init: Tab, Indent

By Xah Lee. Date: . Last updated: .

Set Default Tab Display Width

Put this in your Emacs Init File:

;; set default tab char's display width to 4 spaces
;; default is 8
(setq-default tab-width 4)

Set Indent Commands to Always Use Space Only

(progn
  ;; make indent commands use space only (never tab character)
  (setq-default indent-tabs-mode nil)
  ;; default is t
  ;; t means it may use tab, resulting mixed space and tab
  )

Set Indent Commands to Always Use Tab Characters Only

There is no easy way to do it globally.

A simple workaround, is just to insert / delete literal tab char yourself for indentation.

You can insert a literal tab by Ctrl+q Tab .

Make Tab Key Do Indent or Completion

Here's the official GNU Emacs's convention for controlling what the Tab key does, globally for programing language major modes:

;; make tab key always call a indent command.
(setq-default tab-always-indent t)

;; make tab key call indent command or insert tab character, depending on cursor position
(setq-default tab-always-indent nil)

;; make tab key do indent first then completion.
(setq-default tab-always-indent 'complete)

Note:

If you really want to control what the Tab key does, just hard set that key directly to a command of your choice. The disadvantage is that completion packages such as yasnippet that by default uses Tab key, may not work automatically.

Here's example:

;; example of a function that just insert a tab char
(defun my-insert-tab-char ()
  "insert a tab char. (ASCII 9, \t)"
  (interactive)
  (insert "\t"))

(global-set-key (kbd "TAB") 'my-insert-tab-char)

To make sure that major mode does not override your key, see Emacs Keys: Change Major Mode Keys

Make Return Key Also Do Indent

put this in your Emacs Init File:

;; make return key also do indent, globally
(electric-indent-mode 1)

Emacs, Tab, Indentation, Whitespace