通常,当我处于“插入”模式时,我会按Esc键进入“普通”模式,然后立即按O键以在光标上方开始新行并在那里进入“插入”模式。

但是当我这样做是,在我击中O后有1秒钟的延迟,然后才出现任何可见的响应。此外,如果我在1秒钟的延迟内开始输入新文本,如果新文本以某个字符集(例如j,k,m,n,o)中的任何一个开始,则我会以其他字符结尾我本来不想做的操作,经常弄得一团糟,这时我必须停下来,反复进行撤消和重做,直到我有理由确定自己没有破坏为止。

为了避免这种不愉快,每次输入O后,我都有暂停一秒钟的习惯。但这会减慢我的速度并阻止我成为原本应该成为Vim的速度恶魔。

是什么原因造成的?有修复程序或解决方法吗?

#1 楼

这仅发生在终端中,而不发生在GVIM中,对吗?原因是Vim不能区分各个类型的键和以相同键开头的ANSI Escape序列(例如^[O...<Esc>和后跟O)。

您可以阅读所有底层内容:help 'timeout'(及以下选项)的复杂性。您还可以在其中找到缓解该问题的建议配置:

:set timeout timeoutlen=1000 ttimeoutlen=100


评论


您也可以使用set noesckeys。这样做的副作用是在“插入”模式下禁用了箭头键(也许还有其他一些键?),因此可能并不适合所有人。

–马丁·图尔诺伊(Martin Tournoij)
15年5月13日在15:25



@Carpetsmoker关于“设置noesckeys” ...起作用,但仅在插入模式下有效。我知道我说过我首先处于插入模式;但是,我也经常从普通模式开始执行 O(主要是当我不确定100%是从插入模式还是普通模式开始时),因此我也希望在这种情况下也能使用。

–唐·哈奇
15年5月13日在20:53



@DonHatch可以使用:nnoremap ^ [O O,其中通过按 输入^ [(也可能显示为<1b>)。

–马丁·图尔诺伊(Martin Tournoij)
15年5月13日在22:30



#2 楼

解决方法是,使用Control + OO代替
ESCO。 Control + O使您进入一个命令的普通模式,然后在完成后返回到插入模式。

#3 楼

怎么样:

Control + C O

使用Control + C时您应该注意一些细微之处。