当我在插入模式下按下esc
或Ctrl-[
vim 时,它会挂起半秒钟,然后退出插入模式。这不是性能问题,因为我可以输入任何字符,vim 都会立即退出插入模式,但如果我按下esc
或不输入其他内容,vim 会等待半秒钟。
我认为这是因为 esc 有其他按键绑定,而 vim 正在等待我是否按下它。当我按下 时set notimeout
,vim 会无限期地等待我按下另一个键,然后退出插入模式,这一事实进一步证实了这种怀疑。这很烦人,因为有时我喜欢设置notimeout
。
有人知道如何esc
立即执行吗?是否有其他esc
可以关闭的键绑定?
就其价值而言,:map <Esc>
和:imap <Esc>
收益No mapping found
,我可以在全新安装的没有.vimrc
或.vim
存在的 vim 上重现这一点。
答案1
多个键(包括箭头键)都会发送转义序列。因此,为了使这些键正常工作,vim 必须检查 ESC 后面的其他字符以确定是否按下了其中一个键。默认情况下,转义序列超时和映射序列超时均由设置控制timeoutlen
,默认为 1000 毫秒。但 vim 允许使用 独立设置转义序列超时。(如果您希望它在关闭时也生效,ttimeoutlen
也请进行设置。)除非您喜欢手动输入转义序列或使用 110 波特调制解调器,否则减少转义序列超时应该没有问题。例如,使用 将转义序列超时设置为 100 毫秒。您还可以在插入模式下使用 禁用对转义序列的识别。ttimeout
timeout
:set ttimeoutlen=100
:set noesckeys
答案2
我遇到过类似的问题,按下 ESC 后 vim 会无限期挂起。事实上,它正在等待更多字符 - 您的回答让我想到了这一点!
事实证明这确实是 ESC 字符问题,但有所不同;我在 tmux 中运行 vim。我决定检查“TERM”环境变量,它被设置为“screen”。将 TERM 设置更改为“xterm-color”(或适合您系统的任何设置)使挂起的 vim 问题消失。
不确定它是否适用于你的情况,但考虑到谷歌搜索该问题mark4o 的回答在顶级搜索结果中决定为其他人添加这种潜在情况。