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

68

Passer en mode insertion dans Vim n’est plus instantané depuis que j’utilise tmux. Après avoir appuyé sur Escen mode insertion, il faut un temps considérable pour sortir du mode insertion. Après avoir appuyé sur Escet sur n'importe quelle autre touche, l'interrupteur est immédiat et la commande pour la touche enfoncée après Escest exécutée. Une idée de ce qui pourrait causer ça?

La configuration de Vim n'est pas le problème car le délai ne se produit pas lorsque j'exécute Vim en dehors de tmux, c'est donc probablement lié à tmux d'une façon ou d'une autre. J'utilise gnome-terminal btw.

Il convient également de noter qu'il semble que je ne puisse pas définir les liaisons de clé dans tmux car Escmon plan était de se lier Escà:

bind Escape send-keys ^[

Hélas, il semble que rien Escne lie pour tmux ne fonctionne pas. Le même problème se produit également à l'écran.

Ton van den Heuvel
la source

Réponses:

122

Après avoir parcouru les pages de manuel, il s'avère que tmux a une option pour cela. Ce qui suit ~/.tmux.confcorrige le problème de délai:

 set -sg escape-time 0

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

Ton van den Heuvel
la source
2
Où as tu trouvé ça? Je ne trouve pas de temps d'échappement nulle part man tmux, et la commande ne fonctionne pas pour moi.
djeikyb
Je soupçonne qu’elle n’est disponible que dans la version de développement. Vous pouvez l'obtenir ici: github.com/ThomasAdam/tmux
Ton van den Heuvel
J'aime tout de toi pour cette réponse. Cela vient de résoudre un problème obscur pour Emacs pour moi et je peux enfin aller me coucher!
Bo Jeanes
4
Je devais utiliser tmux kill-server avant que ce paramètre ne fonctionne pour moi. Merci!
Sam
1
Cela me fait souhaiter pouvoir vous donner 10 votes positifs. Trouvé après une heure de temps morts dans vim. Je vous remercie!
Malvim
4

J'avais un problème différent mais similaire que j'essayais de résoudre lorsque j'ai trouvé cette page. Je vais donc le signaler ici au cas où cela serait utile à quiconque serait à la recherche de cette réponse et trouverait cette page de la même manière.

Problème: le mode vi de bash a un délai lors du passage du mode insertion au mode commande

Solution: Dans votre ~/.inputrcfichier, ajoutez set keyseq-timeout nnest une valeur basse supérieure à 0. La valeur par ndéfaut est 500 ms, ce qui cause le délai. Voir la documentation ici .

De plus, si vous voulez savoir dans quel mode vous êtes, jetez un œil à la fourchette de bash de Dylan Cali .

Kvass
la source
c'est très utile, je l'ai mis à 0.01et maintenant son plaisir beaucoup plus rapide. Merci!
Il pourrait également être ajouté /etc/inputrcpour le rendre accessible à tous les utilisateurs.
1

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

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

Étant donné que gnome-terminal utilise AFAIK xtermcomme valeur de la $TERMvariable et tmux screen, je rechercherais dans tous vos fichiers de configuration vim les paramètres qui ne sont utilisés que si la $TERMvariable est égale à screen. Je suppose que certains fichiers de configuration vim sur votre système définissent des mappages pour la gestion des touches fléchées (celles-ci commencent par le ESCcaractère) lorsque le terminal est screen.

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

TERM=xterm vim

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

Jan Hlavacek
la source
Quelques bons indicateurs ici. J'utilise bash, mais malheureusement, je TERM=xterm vimn'ai pas résolu le problème. Je vais devoir creuser un peu plus profond.
Ton van den Heuvel
1

Comme le titre le mentionne Screen, voici la solution pour corriger le comportement de la touche Echap dans GNU Screen. (Tiré d' ici .)

Ajouter

maptimeout 5

pour .screenrcconfigurer le fichier.

Twonky
la source