Vim删除ESC和Ctrl- [

时间:2015-06-21 02:39:14

标签: vim

当我使用多行插页时,如果我执行Ctrl-VDownArrow多次选择,I要插入,请说我输入空格:

 foo
bar
qux

现在,如果我Ctrl-C,则变为

foo
bar
qux

即刻

但如果我Ctrl-[ESC,Vim 滞后半秒,则在所有三行之前插入一个空格

 foo
 bar
 qux

同样地,我说我正在处理一些Ruby代码

def foo
  bar
  end

我仍处于插入模式,光标停留在end之后 如果我Ctrl-C,则end会停留在那里,错误地缩进 如果我Ctrl-[ESC,Vim 滞后半秒,请正确缩进end,因此它变为:

def foo
  bar
end

如何消除这种滞后?

1 个答案:

答案 0 :(得分:2)

当您按某些键或执行某些操作时,您的终端会将转义序列发送到Vim(或任何其他程序)。例如,尝试输入cat并按向上箭头,即可得到:

llama@llama:~$ cat
^[[A

请注意,当您按向上箭头键时,您的终端实际获得的是 Esc [ A (快速连续)。 (^[代表Esc。)

当您转动鼠标上的滚轮等时,会发送类似的转义序列

Vim解释这些转义序列(例如,您可以使用终端内的滚轮在Vim中滚动)。但是因为它们以逃脱角色开头,所以这会造成一些歧义。

例如,当Vim在插入模式下获取Escape字符时,它必须决定它是否意味着“退出插入模式”,或者它是否是转义序列的第一部分(“向上滚动”)。

Vim有几个设置:ttimeoutlen,这是Vim决定“延迟”的数量“好吧,这不是一个转义序列,它是一个实际的转义字符。”这是以毫秒为单位,如果您希望在.vimrc中使用set ttimeoutlen=foo,则可以更改它(其中foo是Vim等待的时间量,以毫秒为单位)。

还有esckeys选项,告诉Vim是否要解释这些转义序列。如果您不关心它们,可以在.vimrc中使用set noesckeys完全删除超时(以及转义序列的功能)。