Skip to content
vic

syl20bnr/evil-escape

Customizable key sequence to escape from insert state and everything else in Emacs.

syl20bnr/evil-escape.json
{
"createdAt": "2014-10-23T01:38:57Z",
"defaultBranch": "master",
"description": "Customizable key sequence to escape from insert state and everything else in Emacs.",
"fullName": "syl20bnr/evil-escape",
"homepage": null,
"language": "Emacs Lisp",
"name": "evil-escape",
"pushedAt": "2024-01-17T05:01:17Z",
"stargazersCount": 233,
"topics": [],
"updatedAt": "2025-11-16T06:59:39Z",
"url": "https://github.com/syl20bnr/evil-escape"
}

MELPA MELPA Stable

Table of Contents

Customizable key sequence to escape from insert state and everything else in Emacs.

Version 3.0 is a rewrite of evil-escape and removes the previous limitations:

  • escape sequence can now be used in macros
  • there is no limitation on the choice of key for the first key of the sequence.

Press quickly fd (or the 2-keys sequence of your choice) to:

  • escape from all stock evil states to normal state
  • escape from evil-lisp-state to normal state
  • escape from evil-iedit-state to normal state
  • abort evil ex command
  • quit minibuffer
  • abort isearch
  • quit ibuffer
  • quit image buffer
  • quit compilation buffers
  • quit magit buffers
  • quit help buffers
  • quit apropos buffers
  • quit ert buffers
  • quit undo-tree buffer
  • quit paradox
  • quit gist-list menu
  • quit helm-ag-edit
  • hide neotree buffer
  • quit evil-multiedit

And more to come !

Contributions to support more buffers are very welcome: Escape Everything !

The package is available in [MELPA][].

If you have MELPA in package-archives, use

M-x package-install RET evil-escape RET

If you don’t, open evil-escape.el in Emacs and call package-install-from-buffer.

To toggle the evil-escape mode globally:

M-x evil-escape-mode

The key sequence can be customized with the variable evil-escape-key-sequence. For instance to change it for jk:

(setq-default evil-escape-key-sequence "jk")

The delay between the two key presses can be customized with the variable evil-escape-delay. The default value is 0.1. If your key sequence is composed with the two same characters it is recommended to set the delay to 0.2.

(setq-default evil-escape-delay 0.2)

The key sequence can be entered in any order by setting the variable evil-escape-unordered-key-sequence to non nil.

A major mode can be excluded by adding it to the list evil-escape-excluded-major-modes.

An inclusive list of major modes can defined with the variable evil-escape-enable-only-for-major-modes. When this list is non-nil then evil-escape is enabled only for the major-modes in the list.

A list of zero arity functions can be defined with variable evil-escape-inhibit-functions, if any of these functions return non nil then evil-escape is inhibited. It is also possible to inhibit evil-escape in a let binding by setting the evil-escape-inhibit variable to non nil.

It is possible to bind evil-escape' function directly, for instance to execute evil-escape with C-c C-g:

(global-set-key (kbd "C-c C-g") 'evil-escape)

[MELPA] !: http://melpa.org/