tmux和Vim:Escape键被视为^ [并且有很长的延迟

Dus*_*tin 16 vim macvim tmux

在MacVim和终端Vim,一切正常,我没有问题.一旦我跳进tmux并在那里运行Vim,转义键就会开始延迟约1秒,并在Vim中显示为^[.

我将按退出键退出插入模式,但在Vim作出反应并将我带回正常模式之前会发生大约1秒的延迟.

如果我输入Ctrl+o暂时插入模式,它会立即弹出进入正常模式而没有延迟.

如果我键入jj以进入正常模式(我设置的快捷方式),它仍然需要大约一秒钟.这让我认为问题可能在于Vim而不是tmux

我已经设置set -sg escape-time 0了我的tmux.conf但它根本没用.

有任何想法吗?

Puh*_*lze 27

请参阅https://unix.stackexchange.com/questions/23138/esc-key-causes-a-small-delay-in-terminal-due-to-its-alt-behavior.

问题是tmux转义延迟.下面的tmux设置应该纠正它:

set -s escape-time 0

  • 虽然这解决了我的问题,但它显然没有解决原始海报的问题:他提到他已经有了这个设置,而且使用备用 vim 映射也无济于事。 (2认同)

ZyX*_*ZyX 4

问题是 escape 是所有功能键、箭头、鼠标点击的第一个字符(它们通过终端使用某种转义序列发送到 vim), \xe2\x80\xa6 因此 vim 最多等待下一个字符 'ttimeoutlen' ('timeoutlen' 如果 'ttimeoutlen' 为 -1) 毫秒,以确保您的意思是按 escape 键而不是按<F1>. 没有办法消除这种延迟,但您可以缩小范围:

\n\n
set timeout timeoutlen=1000 ttimeoutlen=100\n
Run Code Online (Sandbox Code Playgroud)\n\n

。这样,它将等待 1 秒来完成映射,但终端只需要 0.1 秒即可完成发送转义序列。

\n