web-dev-qa-db-fra.com

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

Passer 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 par la suite, le commutateur est immédiat et la commande de la touche enfoncée après Esc est exécuté. 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. J'utilise gnome-terminal btw.

À noter également, il semble que je ne puisse pas définir de raccourcis clavier dans tmux pour Esc, mon plan était de lier Esc à:

bind Escape send-keys ^[

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

67

Après avoir parcouru les pages de manuel, il s'avère que tmux a une option pour cela. Ce qui suit dans ~/.tmux.conf corrige le problème de 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, lancez source-file ~/.tmux.conf à partir de l'invite tmux.

120

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 fichier ~/.inputrc, ajoutez set keyseq-timeout n, où n est une valeur faible supérieure à 0. n est défini par défaut sur 500 ms, ce qui est à l'origine du retard. Voir la documentation ici .

De plus, si vous voulez savoir dans quel mode vous vous trouvez, consultez le fork de bash de Dylan Cali .

4
Kvass

Comme le titre le mentionne Screen, voici la solution pour corriger le comportement de la touche Echap au sein de GNU Screen. (Extrait de ici .)

Ajouter

maptimeout 5

à .screenrc fichier de configuration.

1
Twonky

On dirait que vous utilisez un mapping qui commence par ESC. Lorsque vous appuyez sur le 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 variable d'environnement $TERM et choisir une configuration différente en fonction de sa valeur.

Puisque gnome-terminal utilise AFAIK, xterm en tant que valeur de la variable $TERM et tmux utilise screen, je consulterais dans tous les fichiers de configuration vim les paramètres utilisés: la variable $TERM est égale à screen. Je suppose que certains fichiers de configuration vim sur votre système définissent des mappages pour la gestion des touches de direction (celles-ci commencent par le caractère ESC) lorsque le terminal est screen.

Vous pouvez le tester en modifiant temporairement la variable $TERM 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.

1
Jan Hlavacek