使用tmux或screen切换vim中的模式时有轻微延迟


68

由于使用tmux,在Vim中切换插入模式不再是瞬时的。Esc在插入模式下按下后,要真正退出插入模式需要花费大量时间。在按下Esc键和之后的任何其他键之后,立即切换,并Esc执行之后按下键的命令。知道是什么原因造成的吗?

Vim配置不是问题,因为在tmux之外运行Vim时不会发生延迟,因此这可能与tmux有关。我使用gnome-terminal btw。

同样值得注意的是,我似乎无法在tmux中为定义键绑定Esc,我的计划是绑定Esc到:

bind Escape send-keys ^[

las,似乎Esc对tmux 绑定任何东西都不起作用。屏幕中也会发生相同的问题。

Answers:


122

在翻阅手册页后,事实证明tmux为此提供了一个选项。以下内容~/.tmux.conf解决了延迟问题:

 set -sg escape-time 0

您必须重新启动tmux服务器或重新加载配置才能生效。为此,请source-file ~/.tmux.conf从tmux提示符下发出。


2
您在哪里找到的?我在中的任何地方都找不到转义时间man tmux,该命令对我不起作用。
djeikyb 2011年

我怀疑仅在开发版本中可用。您可以在这里获得它:github.com/ThomasAdam/tmux
Ton van den Heuvel

4
在此设置对我有用之前,我不得不使用tmux kill-server。谢谢!
山姆

1
这使我希望我能给你10票赞成票。经过vim奋战一小时的超时后发现了这一点。谢谢!
马尔维姆2014年

1
@MichaelBrown,我也这样做,但仍然遇到了这个问题。实际上这无关紧要,因为无论您按Escape还是^ [,都将相同的键代码发送到终端仿真器。
Ton van den Heuvel

4

找到该页面时,我遇到了一个试图解决的不同但相似的问题,因此我将其发布在这里,以防其他寻求该答案并以相同方式查找此页面的人获得帮助。

问题:从插入模式切换到命令模式时,bash中的vi模式存在延迟

解决方案:~/.inputrc文件中,添加set keyseq-timeout nwhere n是一些大于0的低值。 n默认值为500ms,这是造成延迟的原因。请参阅此处的文档。

另外,如果您想知道自己所处的模式,请查看Dylan Cali的bash分支


这非常有帮助,我将其设置为0.01,现在将其设置为更快。谢谢!

也可以将其附加到/etc/inputrc所有用户可用。

1

听起来您正在使用以开头的映射ESC。当您按下时ESC,vim必须等待下一个键是否为映射中的键。如果不是,则可以立即继续。

vim配置可能取决于终端,因此它不会在tmux之外发生的事实并不意味着什么。Vim可以查询$TERM环境变量,并根据其值选择不同的配置。

由于gnome-terminal使用,AFAIK xterm作为$TERM变量的值,而tmux使用screen,我将在所有vim配置文件中查找仅当$TERM变量等于时才使用的设置screen。我的猜测是,ESC当终端为时,系统上的某些vim配置文件会设置用于处理箭头键(以字符开头的箭头)的映射screen

您可以通过$TERM在启动vim之前临时更改tmux中的变量来对其进行测试。如果您的外壳是bash,则将vim称为

TERM=xterm vim

在tmux中查看问题是否仍然存在。但是,您不打算将其用作修复程序,因为tmux和xterm的终端功能之间可能存在差异,并且可能会遇到一些问题。


这里有一些很好的指导。我确实使用了bash,但是不幸的TERM=xterm vim是没有解决问题。我将不得不更深入地挖掘。
Ton van den Heuvel'3

1

就像标题提到的Screen一样,这是解决GNU Screen中Escape键行为的解决方案。(从这里拍摄。)

maptimeout 5

.screenrc配置文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.