La tecla ESC provoca un pequeño retraso en la terminal debido a su comportamiento Alt +

67

La configuración de mi terminal es gnome-terminal + tmux + zsh con enlaces vi.

En aplicaciones como vim o incluso en el modo de edición vi de la línea de comandos de zsh, necesito presionar la ESCtecla con frecuencia, pero hay un pequeño retraso antes de que se produzcan los efectos de esta tecla. Ver pantalla GNU hace que la tecla Vim ESC sea lenta

Después de experimentar un poco, descubrí que ESCpresionar la tecla e inmediatamente otra tecla (por ejemplo b) tiene el mismo efecto que golpear Alt+b. No sé por qué este es el caso (probablemente por razones heredadas cuando no hubo Alt? No lo sé). De cualquier manera, tengo dos Altclaves y no quiero este comportamiento con mi ESCclave. He intentado C+[y es el mismo problema con eso también.

No estoy seguro de quién es el responsable de esto, gnome-terminal o tmux o mi sistema operativo (Ubuntu Natty). Cualquier idea sobre cómo abordar esto sería genial.

Actualización : Verifiqué sin tmux en un terminal diferente (LXTerminal) y el retraso también está presente allí.

Shrikant Sharat
fuente
1
No podía entender por qué mi vim estaba actuando extraño. Esta pregunta me hizo recordar que acababa de comenzar a usarla dentro de la pantalla. Me salvaste la cordura.
pabo

Respuestas:

111

Aquí hay una solución real. Agregue lo siguiente a .tmux.conf:

set -s escape-time 0
Vicent Marti
fuente
44
Brillante, gracias! Tuve un retraso al dejar el modo de inserción en vim y realmente no pensé que podría haber sido una interferencia de tmux. Esto hizo el truco
actionshrimp
77
Como se menciona en superuser.com/questions/252214/… tuve que hacer tmux kill-serverpara que esto surta efecto.
PhilT
Para cualquiera que haya llegado a esta página tratando de entender por qué hay un retraso al cambiar del modo de inserción al modo de comando mientras se usa el modo vi en bash, consulte superuser.com/a/1161871/236677
Kvass
3
Puede volver a cargar el archivo de configuración abriendo el símbolo del sistema dentro de tmux con tmux-prefix(predeterminado Ctrl+b) seguido de :e ingresando source-file $HOME/.tmux.conf.
Folfy
7

El retraso es causado por las rutinas de entrada que pueden tener que decidir si se presionó o no una tecla de función. Para esto, la rutina de entrada inicia un temporizador cada vez que lee en un carácter ESC. Los caracteres que se leen desde la entrada antes de que se agote el temporizador (digamos una décima de segundo) se interpretan como la secuencia ESC de una tecla de función y esta secuencia ESC se comparará con cadenas conocidas de secuencias ESC desde el terminal o el base de datos de termcap (depende de qué rutinas de bajo nivel se usen).

Por supuesto, esto es molesto para las aplicaciones donde ESC se usa por sí solo, pero no conozco ninguna solución para esto.

En cuanto a su pregunta con el comportamiento de ESC a= Meta a:

Las teclas Meta no estaban disponibles con todos los teclados. Como solución alternativa, a menudo se le permitía usar la tecla ESC para presionar antes que la otra tecla.

ktf
fuente
Gracias por la explicación ktf. El retraso no está presente en gvim, solo en el terminal (lo comprobé sin tmux y el retraso todavía está allí).
Shrikant Sharat
gvim no sufre este problema, porque obtiene la información sobre qué tecla se presionó desde el servidor X11 (por lo que no tiene que analizar las secuencias ESC).
ktf
Ok, entonces necesito hacer que mi terminal gnome se comporte de la misma manera.
Shrikant Sharat
gnome-terminal no es el problema: el problema descrito afecta solo a los programas que se ejecutan en un terminal (o en una emulación de Terminal) y tiene que analizar las teclas de función. Experimentará el mismo comportamiento, si prueba xterm o KDE-Terminal, por ejemplo.
ktf
2
"Las teclas Meta no estaban disponibles con todos los teclados. Como solución alternativa, a menudo se permitía usar la tecla ESC para presionar antes que la otra tecla". Quizás incluso antes de eso, ttys a menudo solo tenía interfaces de datos de siete bits; no había un octavo "meta bit", por lo que tenía que enviar un ESC para Meta. Y hoy en día UTF-8 está muy extendido, por lo que incluso con conexiones de ocho bits no puede usar el bit alto para Meta.
Chris Page
3

Si bien esto puede no solucionar directamente su problema, he descubierto que puedo usar <Ctrl> cpara salir del modo de inserción. Esto también se puede usar para salir del desplazamiento de la pantalla de tmux (que se puede invocar usando <leader> PgUP)

dtyler
fuente
3
No recomendaría usar <C-c>para salir del modo de inserción en el uso regular, ya que no ejecuta el InsertLeavecomando automático que algunos complementos podrían estar buscando. Ver :h i_CTRL-C.
Shrikant Sharat