A tecla ESC causa um pequeno atraso no terminal devido ao seu comportamento Alt +


67

Minha configuração do terminal é gnome-terminal + tmux + zsh com ligações do vi.

Em aplicativos como o vim ou mesmo no modo de edição da linha de comando vi do zsh, preciso pressionar a ESCtecla frequentemente, mas há um pequeno atraso antes que os efeitos dessa chave ocorram. Veja GNU Screen torna a tecla ESC do Vim lenta

Após algumas experiências, descobri que pressionar a ESCtecla e imediatamente outra tecla (digamos b) tem o mesmo efeito que pressionar Alt+b. Não sei por que esse é o caso (provavelmente por motivos de legado, quando não havia Alt? Não sei). De qualquer forma, tenho duas Altchaves e não quero esse comportamento com a minha ESCchave. Eu tentei com C+[e é o mesmo problema com isso também.

Não tenho certeza de quem é responsável por isso, gnome-terminal ou tmux ou meu próprio sistema operacional (Ubuntu Natty). Qualquer idéia de como lidar com isso seria ótimo.

Atualização : verifiquei sem tmux em um terminal diferente (LXTerminal) e o atraso também está presente lá.


11
Eu não conseguia descobrir por que meu vim estava agindo de forma estranha. Esta pergunta me fez lembrar que eu tinha começado a usá-lo na tela. Você salvou minha sanidade.
Pab

Respostas:


111

Aqui está uma correção real. Adicione o seguinte a .tmux.conf:

set -s escape-time 0

4
Brilhante, obrigado! Teve um atraso ao sair do modo de inserção no vim e realmente não tinha pensado que poderia estar interferindo no tmux. Isso fez o truque
actionshrimp

7
Como mencionado em superuser.com/questions/252214/…, eu tive que fazer tmux kill-serverisso para entrar em vigor.
PhilT

Para quem chegou a esta página tentando entender por que há um atraso ao alternar do modo de inserção para o modo de comando enquanto usa o modo vi no bash, consulte superuser.com/a/1161871/236677
Kvass

3
Você pode recarregar o arquivo de configuração abrindo o prompt de comando dentro do tmux com tmux-prefix(padrão Ctrl+b) seguido por :e digitando source-file $HOME/.tmux.conf.
Folfy

7

O atraso é causado pelas rotinas de entrada que podem ter que decidir se uma tecla de função foi pressionada ou não. Para isso, a rotina de entrada inicia um temporizador sempre que lê em um caractere ESC. Os caracteres que são lidos da entrada antes que o temporizador se esgote (digamos um décimo de segundo) são então interpretados como sequência ESC de uma tecla de função e essa sequência ESC será comparada com seqüências conhecidas de secuências ESC do terminfo ou do base de dados termcap (depende de quais rotinas de baixo nível são usadas).

É claro que isso é irritante para aplicativos em que o ESC é usado por si só, mas não conheço nenhuma solução alternativa para isso.

Em relação à sua pergunta com o comportamento de ESC a= Meta a:

Meta chaves não estavam disponíveis em todos os teclados. Como solução alternativa, muitas vezes era permitido usar a tecla ESC para pressionar antes da outra tecla.


Obrigado pela explicação ktf. O atraso não está presente no gvim, apenas no terminal (verifiquei sem tmux e o atraso ainda está lá).
Shrikant Sharat

O gvim não sofre com esse problema, porque obtém as informações sobre qual tecla foi pressionada no servidor X11 (para que não precise analisar sequências ESC).
Ktf # 24/11

Ok, então eu preciso fazer meu terminal gnome se comportar da mesma maneira.
Shrikant Sharat

o gnome-terminal não é o problema - o problema descrito afeta apenas programas em execução em um terminal (ou em uma emulação de terminal) e precisa analisar as teclas de função. Você experimentará o mesmo comportamento, se tentar o xterm ou o KDE-Terminal, por exemplo.
Ktf #

2
"As teclas meta não estavam disponíveis em todos os teclados. Como solução alternativa, muitas vezes era permitido usar a tecla ESC para pressionar antes da outra tecla." Talvez até antes disso, os ttys geralmente tivessem apenas interfaces de dados de sete bits; não havia oitavo "meta bit", então você tinha que enviar um ESC para o Meta. E hoje em dia o UTF-8 é generalizado, portanto, mesmo com conexões de oito bits, você não pode usar o alto para o Meta.
Chris Page

3

Embora isso possa não corrigir diretamente o seu problema, descobri que posso usá-lo <Ctrl> cpara sair do modo de inserção. Isso também pode ser usado para sair da rolagem de tela do tmux (que pode ser chamada usando <leader> PgUP)


3
Eu não recomendaria o uso <C-c>para sair do modo de inserção no uso regular, pois ele não executa o InsertLeavecomando automático que alguns plugins podem estar assistindo. Veja :h i_CTRL-C.
Shrikant Sharat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.