使用Ctrl+;[代替Vim中的ESC

使用Ctrl+;[代替Vim中的ESC,vim,Vim,我想训练自己避免点击ESC按钮退出插入模式。我想改为使用Ctrl+[但在我将其放入.vimrc之后 inoremap <ESC> <NOP> inoremap 我也不能使用Ctrl+[键]。 如何解决此问题?Vim无法区分ESC和Ctrl-[。如果您:h keycode,您将看到: notation meaning equivalent decimal value(s) ~ --------------------------------

我想训练自己避免点击ESC按钮退出插入模式。我想改为使用Ctrl+[但在我将其放入.vimrc之后

inoremap <ESC> <NOP>
inoremap
我也不能使用Ctrl+[键]。
如何解决此问题?

Vim无法区分ESC和
Ctrl-[
。如果您
:h keycode
,您将看到:

notation    meaning         equivalent  decimal value(s)    ~
-----------------------------------------------------------------------

<Esc>       escape          CTRL-[   27 *escape* *<Esc>*
表示等效十进制值的符号~
-----------------------------------------------------------------------
escape CTRL-[27*escape***

但您可以拔出ESC键帽。:/p>在Vim内部无法执行此操作;您必须求助于外部程序,例如,ESC上的挂钩仅在Vim应用程序内部激活

由于键盘输入是在内部处理的,不幸的是,即使在GVIM中,今天通常也不可能做到这一点。一些组合键,如Ctrl+非字母键,无法映射,Ctrl+字母与Ctrl+Shift+字母无法区分。(除非您的终端为其发送不同的termcap代码,而大多数情况下不会)在插入或命令行模式下,尝试键入组合键。如果没有发生任何情况/插入,则无法使用该组合键。这也适用于
/
/
/
等。(唯一的例外是
/
)这是一个已知的痛点,也是关于vim_dev和#vim IRC通道的各种讨论的主题

一些人(最重要的是Paul LeoNerd Evans)希望解决这个问题(即使是支持这个功能的终端中的console Vim),并且已经浮动了


但是到今天为止,还没有任何补丁或志愿者出现,尽管许多人表示希望在未来的Vim 8主要版本中有此功能。

要了解一些历史细节,请执行
man ascii
并查看十六进制代码。输入的只是这些数字。
CTRL
键的效果发生在终端上,它只是在strippe上d键代码的三个高位,因此按住
CTRL
键将
[
5b
映射到
1b