Ligero retraso al cambiar de modo en vim usando tmux o pantalla

68

Cambiar hacia y desde el modo de inserción en Vim ya no es instantáneo ya que uso tmux. Después de presionar Escen modo de inserción, lleva una cantidad notable de tiempo salir del modo de inserción. Después de presionar Escy cualquier otra tecla después, el interruptor es inmediato y Escse ejecuta el comando para la tecla presionada después . ¿Alguna idea de lo que podría causar esto?

La configuración de Vim no es el problema, ya que el retraso no ocurre cuando ejecuto Vim fuera de tmux, por lo que esto probablemente esté relacionado con tmux de alguna manera. Yo uso gnome-terminal por cierto.

También vale la pena señalar, parece que no puedo definir las asociaciones de teclas en tmux porque Esc, mi plan era vincularme Esca:

bind Escape send-keys ^[

Por desgracia, parece vinculante Escpara tmux no funciona. El mismo problema ocurre en la pantalla también.

Ton van den Heuvel
fuente

Respuestas:

122

Después de recorrer las páginas del manual, resulta que tmux tiene una opción para esto. Lo siguiente en ~/.tmux.confsoluciona el problema de retraso:

 set -sg escape-time 0

Debe reiniciar su servidor tmux o volver a cargar su configuración para que esto surta efecto. Para hacer esto, emita source-file ~/.tmux.confdesde el indicador tmux.

Ton van den Heuvel
fuente
2
¿Dónde encontraste esto? No puedo encontrar el tiempo de escape en ninguna parte man tmux, y el comando no funciona para mí.
djeikyb 05 de
Sospecho que solo está disponible en la versión de desarrollo. Puede obtenerlo aquí: github.com/ThomasAdam/tmux
Ton van den Heuvel
55
Tuve que usar tmux kill-server antes de que esta configuración funcionara para mí. ¡Gracias!
Sam
1
Esto me hace desear poder darte 10 votos a favor. Encontré esto después de una hora de batallar tiempos de espera en vim. ¡Gracias!
malvim
1
@MichaelBrown, yo también, y sigo con este problema. En realidad, no debería importar, porque el mismo código de clave se envía al emulador de terminal independientemente de si presiona escape o ^ [.
Ton van den Heuvel
4

Tuve un problema diferente pero similar que estaba tratando de resolver cuando encontré esta página, así que lo publicaré aquí en caso de que sea útil para cualquier otra persona que esté buscando esta respuesta y encuentre esta página de la misma manera.

Problema: el modo vi en bash tiene un retraso al cambiar del modo de inserción al modo de comando

Solución: en su ~/.inputrcarchivo, agregue set keyseq-timeout ndonde nhay algún valor bajo mayor que 0. el valor npredeterminado es 500ms, que es lo que causa el retraso. Ver documentación aquí .

Además, si quieres saber en qué modo estás, mira el tenedor de bash de Dylan Cali .

Kvas
fuente
eso es muy útil, lo configuré 0.01y ahora es mucho más rápido. ¡Gracias!
También se puede agregar /etc/inputrcpara que esté disponible para todos los usuarios.
1

Parece que está utilizando una asignación que comienza con ESC. Cuando presiona ESC, vim tiene que esperar para ver si la siguiente tecla es la que está en la asignación. Si no es así, puede continuar de inmediato.

La configuración de vim puede depender de la terminal, por lo que el hecho de que no ocurra fuera de tmux no significa mucho. Vim puede consultar la $TERMvariable de entorno y elegir diferentes configuraciones según su valor.

Dado que gnome-terminal usa, AFAIK, xtermcomo el valor de la $TERMvariable, y tmux usa screen, buscaría en todos sus archivos de configuración vim las configuraciones que solo se usan si la $TERMvariable es igual a screen. Mi conjetura es que algún archivo de configuración vim en su sistema establece asignaciones para el manejo de teclas de flecha (que comienzan con el ESCcarácter) cuando el terminal está screen.

Puede probarlo cambiando temporalmente la $TERMvariable en tmux antes de iniciar vim. Si su shell es bash, llame a vim como

TERM=xterm vim

en tmux y vea si el problema persiste. Sin embargo, no debe usar eso como una solución, ya que puede haber diferencias entre las capacidades de terminal de tmux y xterm, y puede encontrarse con algunos problemas.

Jan Hlavacek
fuente
Algunos buenos consejos aquí. Yo uso bash, pero desafortunadamente TERM=xterm vimno solucionó el problema. Tendré que cavar un poco más profundo.
Ton van den Heuvel
1

Como el título menciona Pantalla, aquí está la solución para arreglar el comportamiento de la tecla Escape dentro de la Pantalla GNU. (Tomado de aquí )

Añadir

maptimeout 5

al .screenrcarchivo de configuración.

Twonky
fuente