ESC键由于其Alt +行为而导致终端中的少量延迟


67

我的终端设置是带有vi绑定的gnome-terminal + tmux + zsh。

在像vim之类的应用程序中,或者甚至在zsh的命令行vi编辑模式下,我都需要频繁按下该ESC键,但是在此键生效之前会有一点延迟。参见GNU屏幕使Vim ESC键变慢

经过一番实验,我发现敲击ESC键和立即按下另一个键(例如b)与击键具有相同的效果Alt+b。我不知道为什么会这样(可能是由于遗留原因,当时没有Alt?我不知道)。无论哪种方式,我都有两个Alt键,并且我不希望这种行为与我的ESC键有关。我已经尝试过,C+[并且它也有同样的问题。

我不确定是谁对此负责,是gnome-terminal还是tmux还是我的OS本身(Ubuntu Natty)。关于如何解决这个问题的任何想法都很棒。

更新:我检查是否在另一个终端(LXTerminal)上没有tmux,并且那里也存在延迟。


1
我不知道为什么我的vim表现得很奇怪。这个问题使我记得我刚刚开始在屏幕上使用它。你救了我的理智。
pabo 2015年

Answers:


111

这是一个实际的解决方法。将以下内容添加到.tmux.conf

set -s escape-time 0

4
太好了,谢谢!延迟了在vim中离开插入模式的时间,并没有真正想到这可能是tmux的干扰。这就是窍门
行动虾

7
superuser.com/questions/252214/…所述,我必须这样做tmux kill-server才能生效。
PhilT

对于试图了解为什么在bash中使用vi模式时从插入模式切换到命令模式时会有延迟的任何人,请访问superuser.com/a/1161871/236677
Kvass 2016年

3
您可以通过以下方式重新加载配置文件:在tmux内部打开命令提示符,并使用tmux-prefix(默认Ctrl+b),然后:输入source-file $HOME/.tmux.conf
2015年

7

延迟是由可能必须决定是否按下功能键的输入例程引起的。为此,输入例程在每次读入ESC字符时都会启动一个计时器。然后,在计时器用尽之前从输入读取的字符(假设是十分之一秒)将被解释为功能键的ESC序列,并将此ESC序列与terminfo或termcap数据库(取决于使用哪种低级例程)。

当然,这对于单独使用ESC的应用程序很烦人,但是我不知道有任何解决方法。

关于您的ESC a= 行为问题Meta a

并非所有键盘都提供元​​键。解决方法是,通常允许在其他键之前使用ESC键。


感谢您对ktf的解释。gvim中不存在延迟,仅在终端中存在(我检查时没有tmux,并且延迟仍然存在)。
Shrikant Sharat 2011年

gvim不会遇到这个问题,因为它从X11服务器获取按下了哪个键的信息(因此它不必解析ESC序列)。
ktf

好的,因此我需要使gnome-terminal的行为与之相同。
Shrikant Sharat 2011年

gnome-terminal并不是问题-所描述的问题仅影响终端(或终端仿真)中运行的程序并且必须解析功能键。例如,如果您尝试使用xterm或KDE-Terminal,您将遇到相同的行为。
ktf

2
“不是所有键盘都可以使用元键。作为一种解决方法,通常允许在其他键之前使用ESC键。” 也许甚至早于此,ttys通常只有7位数据接口。没有第八个“元位”,因此您必须为Meta发送ESC。如今,UTF-8十分普及,因此即使使用八位连接,您也无法将高位用于Meta。
克里斯·佩奇

3

尽管这可能无法直接解决您的问题,但我发现可以<Ctrl> c退出退出插入模式。这也可以用于退出tmux的屏幕滚动(可以使用调用<leader> PgUP


3
我不建议您<C-c>在常规使用中退出插入模式,因为它不会运行InsertLeave某些插件可能正在监视的自动命令。请参阅:h i_CTRL-C
Shrikant Sharat
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.