Emacs: Tabs, Space, Indentation Setup

By Xah Lee. Date: . Last updated: .

This page tells you how to setup tabs and indentation for emacs, and useful commands to convert or control indentation.

Setting Up Indent

How to stop mixed tabs and space?

Put this in your emacs init.

;; make indentation commands use space only (never tab character)
(setq-default indent-tabs-mode nil) ; emacs 23.1, 24.2, default to t

How to set default tab display width?

;; set default tab char's display width to 4 spaces
(setq-default tab-width 4) ; emacs 23.1, 24.2, default to 8

;; set current buffer's tab char's display width to 4 spaces
(setq tab-width 4)

How to make the Tab ↹ key always 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)


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 examples:

(global-set-key (kbd "TAB") 'my-command) ; same as Ctrl+i
(global-set-key (kbd "<tab>") 'my-command)

;; • the syntax (kbd "TAB") corresponds to ASCII 9 control character, which is also equivalent to (kbd "C-i"). At the core, Emacs uses characters with control bits to represent key press.

;; • the syntax (kbd "<tab>") is the tab key, higher level. when emacs is running in GUI, it can distinguish <tab> key vs the ASCII control character ASCII 9.

;; • by default (kbd "<tab>") is translated to (kbd "TAB").

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

〔➤see Emacs: How to Define Keys

How to make Return ↩ key also do indent of previous line?

;; make return key also do indent, for current buffer only
(electric-indent-local-mode 1)

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

Indent Commands

How to insert Tab character or Newline character?

The following method works everywhere (also works in minibuffer).

To insert a literal tab char, press 【Ctrl+q Tab ↹】.

To insert a newline char, type 【Ctrl+q Ctrl+j】.

You need to use the above method to insert these characters, because for example in minibuffer, pressing Tab ↹ does name completion and pressing Enter ↵ finishes the prompt. In most programing language modes, pressing Enter ↵ or Tab ↹ also does some auto indenting.

For detail, see: Emacs: Newline Representations ^M ^J ^L.

How to indent current line?

Call indent-for-tab-commandTab ↹】.

How to indent a text selection of source code?

Call indent-regionCtrl+Alt+\】.

How to convert tabs to space in source code?

Select a region first, then call untabify or tabify.

How to see whitespaces?

Call whitespace-mode 〔➤see Emacs: Make Whitespaces Visible

How to delete trailing whitespaces?

Emacs: Delete Trailing Whitespace


How to do completion?

Call completion-at-pointCtrl+Alt+i】. Or call complete-symbol.

Like it? Buy Xah Emacs Tutorial. Thanks.