Emacs evil-mode how to change insert-state to emacs-state automatically

How about this approach:

(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)

I use it and it seems to do the trick. And since you're not changing the state, you retain state-related configs like cursor-color, etc.


Surprised nobody posted this yet...

(defalias 'evil-insert-state 'evil-emacs-state)

Anything that tries to call evil-insert-state will just end up calling evil-emacs-state. Works for i, a, o, O, etc.


Tell me how this works. It's a hack that basically replaces the function evil-insert-state with evil-emacs-state. The problem is figuring out how to exit emacs state with the escape key. For instance, this version works fine when I exit emacs state with the ESC key, but not when I try to do the same with C-[:

; redefine emacs state to intercept the escape key like insert-state does:
(evil-define-state emacs
  "Emacs state that can be exited with the escape key."
  :tag " <EE> "
  :message "-- EMACS WITH ESCAPE --"
  :input-method t
  ;; :intercept-esc nil)
  )

(defadvice evil-insert-state (around emacs-state-instead-of-insert-state activate)
  (evil-emacs-state))

There is now a bulitin way for Evil to do this

(setq evil-disable-insert-state-bindings t)

before loading evil

Reference: https://github.com/noctuid/evil-guide#use-some-emacs-keybindings