ESC key causes a small delay in terminal due to its Alt+ behavior

My terminal setup is gnome-terminal + tmux + zsh with vi bindings.

In applications like vim or even in the zsh’s command line vi editing mode, I need to frequently hit the ESC key but there is a small delay before the effects of this key take place. See GNU Screen makes Vim ESC key slow

After some experimentation, I found that hitting ESC key and immediately another key (say b) has the same effect as hitting Alt+b. I don’t know why this is the case (probably for legacy reasons when there was no Alt? I don’t know). Either way, I have two Alt keys and I don’t want this behaviour with my ESC key. I have tried with C+[ and its the same problem with that too.

I’m not sure who is responsible for this, gnome-terminal or tmux or my OS itself (Ubuntu Natty). Any ideas on how to address this would be great.

Update: I checked without tmux on a different terminal (LXTerminal) and the delay is present there too.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Here’s an actual fix. Add the following to .tmux.conf:

set -s escape-time 0

As mentioned in the comments: The server may need to be restarted. 
tmux kill-server kills the server; you may need to restart it. 
Alternatively, you can reload the configuration file
from the command prompt inside tmux by typing your tmux prefix
(default Ctrl+B) followed by :
and entering source-file ~/.tmux.conf.

Method 2

The delay is caused by the input routines that may have to decide whether a function key was pressed or not. For this the input routine starts a timer whenever it reads in an ESC character. Characters that are read from the input before the timer runs out (let’s say a tenth of a second) are then interpreted as ESC sequence of a function key and this ESC-sequence will be compared with known strings of ESC secuences from the terminfo or the termcap data base (depends on which low level routines are used).

Of cource this is annoying for applications where ESC is used on its own, but I don’t know of any workaround for this.

Regarding your question with the behaviour of ESC a = Meta a:

Meta keys were not available with all keyboards. As a workaround it was often allowed to use the ESC key to be pressed before the other key.

Method 3

While this may not directly fix your issue, I have found that I can use <Ctrl> c to exit out of insert mode. This can also be used to exit tmux’s screen scrolling (which can be invoked using <leader> PgUP)


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x