Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


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

Subscribe to updates I use evil-escape

Statistics on evil-escape

Number of watchers on Github 104
Number of open issues 16
Average time to close an issue about 1 month
Main language Emacs Lisp
Average time to merge a PR 17 days
Open pull requests 2+
Closed pull requests 11+
Last commit about 2 years ago
Repo Created about 5 years ago
Repo Last Updated almost 2 years ago
Size 105 KB
Organization / Authorsyl20bnr
Latest Releasev3.14
Page Updated
Do you use evil-escape? Leave a review!
View open issues (16)
View evil-escape activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating evil-escape for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)



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


Key sequence

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")

Delay between keys

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)

Unordered key sequence

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

Excluding a major mode

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

Enable only for a list of 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.

Inhibit evil-escape

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.

Assign a key binding directly

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)
evil-escape open issues Ask a question     (View All Issues)
  • about 3 years Isuued with term and evil-escape keys
  • about 3 years Add support for escaping while Caps Lock is on?
  • about 3 years Doesn't work with ivy-hydra
  • over 3 years evil-mc problem
  • over 3 years Weird indentation effect when using evil-escape-key-sequence?
  • over 3 years Typing the first letter of evil-escape sequence makes highlight-line flicker
  • over 3 years Add support for multiple evil-escape-key-sequences
  • almost 4 years evil-escape doesn't work in ibuffer
  • almost 4 years evil-escape doesn't play nicely in terminal with some latin characters
  • almost 4 years Pressing "fd" quickly in normal state should take no effect or find d?
  • about 4 years `lispy-flow` briefly shows `f`
  • about 4 years Visual mode lag on evil-next-line when 'jk' used as escape sequence
  • about 4 years Escape sequence for alternative input-method
  • about 4 years evil-escape doesn't escape from multiple-cursors
evil-escape open pull requests (View All Pulls)
  • Add support for excluding evil states
  • Use string-match-p over string-match
evil-escape list of languages used
evil-escape latest release notes
v3.14 3.14
  • Fix flickering when using 'global-hl-line-mode' (thanks to muahah)
  • Fix custom handling for deft which causes duplicate inserts (thanks to ccmtaylor)
  • Add support for excluding evil states (see new customize variable evil-escape-excluded-states) (thanks to TheBB)
  • Add support for nil value with evil-escape-key-sequence to disable evil-escape.
  • Add support for evil-magit
  • Add support for image-mode
v.3.13 3.13
  • Use evil-lisp-state/quit to exit evil-lisp-state
  • Fix double insertion of f in deft buffer
v3.12 3.12
  • Execute helm-keyboard-quit in helm buffers (fixes a bug with Magit using Helm).
  • Add support for ibuffer buffer
  • Add support for emoji-cheat-sheet-plus-buffer buffer
  • Better handling of the minibuffer in emacs state
  • Allow evil-escape in normal state if it makes sense (i.e. when ESC is not bound to evil-force-normal-state itt is now possible to go back to evilified state from normal state)
More projects by syl20bnr View all
Other projects in Emacs Lisp