After using and learning Neovim for over 2 years, I have finally published my first plugin – better-escape.vim.
Better-escape.vim is a plugin to help users escape from insert mode quickly without experiencing the lagging that comes with Vim mappings.
As a Vim user, a very popular mapping to escape insert mode is to map jj
or jk
or kj
etc. to Esc,
since the Esc key is hard to reach without moving your hand from the home row.
inoremap jk <ESC>
inoremap jj <ESC>
inoremap kj <ESC>
However, this comes with an annoyance. If you use jk
to escape insert mode,
whenever you press j
in insert mode, Vim will not write it to the buffer, it
will wait for timeoutlen
milliseconds to see whether you want to use the jk
mapping or you want to
input j
literally. This issue is easily noticeable when we have a relatively large
timeoutlen
value.
In my previous post, I
have already talked about this topic and provided a solution. The solution is to
use an insert mode mapping for k
only. When we press k
, we check if the previous
character is j
. If that is true, we will erase previous j
and go to normal mode.
Otherwise, k
is inserted as is. There is no lagging any more. The problem is that
now we can not input jk
directly in insert mode. To insert k
when the previous
character is j
, we need to press Ctrl-V
, then press j
.
In better-escape.vim, I have a smarter solution. We will check the time spent
between pressing j
and k
in insert mode. If the time is above a predefined
threshold, jk
will be inserted literally. Otherwise, we will escape from
insert mode. With this plugin, you can easily customize the shortcut for
escaping insert mode, as well as the time threshold used.