75 votes

Léger retard lors du changement de mode dans vim en utilisant tmux ou screen

Le passage en mode insertion dans Vim n'est plus instantané depuis que j'utilise tmux. Après avoir appuyé sur Esc en mode insertion, il faut un temps considérable pour sortir du mode insertion. Après avoir appuyé sur Esc et toute autre touche après la commutation est immédiate, et la commande pour la touche pressée après Esc est exécuté. Une idée de ce qui pourrait causer cela ?

La configuration de Vim n'est pas le problème car le retard ne se produit pas lorsque je lance Vim en dehors de tmux, donc c'est probablement lié à tmux d'une manière ou d'une autre. J'utilise gnome-terminal en fait.

Il faut également noter qu'il semble que je ne puisse pas définir les liens entre les touches dans tmux pour Esc mon plan était de lier Esc à :

bind Escape send-keys ^[

Hélas, il semble que contraindre quoi que ce soit à Esc pour tmux ne fonctionne pas. Le même problème se produit à l'écran également.

139voto

Robert Zelník Points 841

Après avoir parcouru les pages du manuel, il s'avère que tmux a une option pour cela. Ce qui suit dans ~/.tmux.conf résout le problème du retard :

 set -sg escape-time 0

Vous devez redémarrer votre serveur tmux ou recharger votre configuration pour que cela prenne effet. Pour ce faire, tapez source-file ~/.tmux.conf à partir de l'invite tmux.

8voto

Kvass Points 201

J'avais un problème différent mais similaire que j'essayais de résoudre quand j'ai trouvé cette page, alors je vais le poster ici au cas où il serait utile à quelqu'un d'autre qui cherche cette réponse et trouve cette page de la même manière.

Problème : le mode vi dans bash présente un retard lors du passage du mode insertion au mode commande

Solution : Dans votre ~/.inputrc ajoutez set keyseq-timeout n どこ n est une valeur faible supérieure à 0. n La valeur par défaut est de 500 ms, ce qui est à l'origine du retard. Voir la documentation aquí .

De plus, si vous voulez être en mesure de savoir dans quel mode vous vous trouvez, consultez le site La fourchette de bash de Dylan Cali .

3voto

Twonky Points 131

Comme le titre le mentionne Screen, voici la solution pour corriger le comportement de la touche Escape dans GNU Screen. (Tiré de aquí .)

Ajouter

maptimeout 5

à .screenrc fichier de configuration.

1voto

Talon876 Points 129

Il semble que vous utilisez un mappage qui commence par ESC . Lorsque vous appuyez sur la touche ESC vim doit attendre de voir si la clé suivante est celle du mappage. Si ce n'est pas le cas, il peut immédiatement continuer.

La configuration de vim peut dépendre du terminal, donc le fait que cela ne se produise pas en dehors de tmux ne signifie pas grand chose. Vim peut interroger le $TERM et choisir une configuration différente en fonction de sa valeur.

Puisque gnome-terminal utilise, AFAIK, xterm comme la valeur de la $TERM et tmux utilise la variable screen je chercherais dans tous vos fichiers de configuration de vim les paramètres qui ne sont utilisés que dans le cadre de l'option $TERM est égale à screen . Je pense qu'un fichier de configuration de vim sur votre système définit les mappages pour la gestion des touches fléchées (celles qui commencent par le symbole ESC ) lorsque le terminal est screen .

Vous pouvez le tester en modifiant temporairement le $TERM dans tmux avant de démarrer vim. Si votre Shell est bash, appelez vim en tant que

TERM=xterm vim

dans tmux et voyez si le problème persiste. Vous ne devriez pas utiliser cela comme une solution, cependant, car il peut y avoir des différences entre les capacités de terminal de tmux et de xterm, et vous pouvez rencontrer des problèmes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X