ESC
is the escape character, <escape>
is the symbol generated by pressing the ESC key in X. The escape character is generated when pressing something key together with the meta-key like M-x
, that actually generates two key events, first the ESC event, second the x
. (actually, that's only true in terminal mode since in X M-x
generates a special event, but this event is mapped to ESC x
). The problem is that in terminal mode the escape key does not generate <escape>
but also ESC
.
That said, in order to have the escape key working correctly in terminal, Evil has to catch the ESC event and possibly translate it to <escape>
after some timeout (otherwise either bindings like M-x
or leaving insert state with ESC
would not work). In other words, the event ESC
typically never reaches those keymaps because it is translated to <escape>
before. The variable evil-intercept-esc
can be used to customize this behavior (but only in newly created frames).
"<escape>"
instead of"ESC"
. But it would be interesting to get an explanation for this