La touche ESC provoque un léger retard dans le terminal en raison de son comportement Alt +

68

La configuration de mon terminal est gnome-terminal + tmux + zsh avec les liaisons vi.

Dans des applications comme vim ou même dans le mode d'édition vi de la ligne de commande du zsh, je dois appuyer souvent sur la ESCtouche, mais il reste un petit délai avant que les effets de cette clé ne se produisent. Voir L' écran GNU ralentit la touche Vim ESC

Après quelques expériences, j'ai trouvé que frapper la ESCtouche et immédiatement une autre touche (disons b) a le même effet que frapper Alt+b. Je ne sais pas pourquoi c'est le cas (probablement pour des raisons historiques quand il n'y en avait pas Alt? Je ne sais pas). Quoi qu'il en soit, j'ai deux Altclés et je ne veux pas ce comportement avec ma ESCclé. J'ai essayé avec C+[et c'est le même problème avec cela aussi.

Je ne sais pas qui est responsable de cela, gnome-terminal ou tmux ou de mon système d'exploitation lui-même (Ubuntu Natty). Toutes les idées sur la façon de résoudre ce problème seraient formidables.

Mise à jour : j'ai vérifié sans tmux sur un autre terminal (LXTerminal) et le délai est présent également.

Shrikant Sharat
la source
1
Je ne pouvais pas comprendre pourquoi mon vim agissait étrangement. Cette question m'a rappelé que je venais de commencer à l'utiliser à l'écran. Vous avez sauvé ma santé mentale.
Mariage

Réponses:

112

Voici une solution réelle. Ajouter ce qui suit à .tmux.conf:

set -s escape-time 0
Vicent Marti
la source
4
Génial, merci! Un délai a quitté le mode insertion dans vim et je ne pensais pas vraiment que c’était l’interférence de tmux. Cela a fait l'affaire
actionshrimp
7
Comme mentionné dans superuser.com/questions/252214/…, je devais le faire tmux kill-serverpour que cela prenne effet.
PhilT
Pour tous ceux qui sont arrivés sur cette page et qui essaient de comprendre pourquoi il y a un retard lors du passage du mode insertion au mode commande lors de l'utilisation du mode vi sous bash, voir superuser.com/a/1161871/236677
Kvass
3
Vous pouvez recharger le fichier de configuration en ouvrant l'invite de commande dans tmux avec tmux-prefix(par défaut Ctrl+b) suivi de :et en entrant source-file $HOME/.tmux.conf.
Folfy
7

Le retard est dû aux routines d’entrée qui peuvent avoir à décider si une touche de fonction a été enfoncée ou non. Pour cela, la routine d’entrée démarre une minuterie chaque fois qu’elle lit un caractère ESC. Les caractères lus à partir de l'entrée avant la fin du temporisateur (disons un dixième de seconde) sont alors interprétés comme une séquence ESC d'une touche de fonction et cette séquence ESC sera comparée aux chaînes connues de séquences ESC issues de la terminfo ou du base de données termcap (dépend des routines de bas niveau utilisées).

Bien sûr, cela est agaçant pour les applications où ESC est utilisé seul, mais je ne connais aucune solution de contournement pour cela.

Concernant votre question avec le comportement de ESC a= Meta a:

Les clés méta n'étaient pas disponibles avec tous les claviers. Pour contourner le problème, il était souvent permis d’appuyer sur la touche Échap avant l’autre touche.

ktf
la source
Merci pour l'explication ktf. Le délai n’est pas présent dans gvim, seulement dans le terminal (j’ai vérifié sans tmux et le délai est toujours là).
Shrikant Sharat
gvim ne souffre pas de ce problème, car il obtient l’information sur la touche qui a été pressée à partir du serveur X11 (il n’a donc pas à analyser les séquences ESC).
KTF
Ok, je dois donc faire en sorte que mon gnome-terminal se comporte de la même manière.
Shrikant Sharat
le problème n'est pas le gnome-terminal - le problème décrit ne concerne que les programmes exécutés sur un terminal (ou dans une émulation de terminal) et doit analyser les touches de fonction. Vous rencontrerez le même comportement si vous essayez par exemple xterm ou KDE-Terminal.
KTF
2
"Les clés méta n'étaient pas disponibles avec tous les claviers. Pour contourner le problème, il était souvent autorisé d'utiliser la touche Échap avant d'être enfoncé avant l'autre touche." Peut-être même avant cela, ttys n’avait souvent que des interfaces de données à sept bits; il n'y avait pas de huitième "meta bit", vous deviez donc envoyer un ESC pour Meta. Et de nos jours, UTF-8 est très répandu. Ainsi, même avec des connexions à huit bits, vous ne pouvez pas utiliser le bit élevé pour Meta.
Chris Page
3

Bien que cela ne résolve pas directement votre problème, j'ai constaté que je pouvais utiliser <Ctrl> cpour sortir du mode insertion. Ceci peut également être utilisé pour quitter le défilement d'écran de tmux (qui peut être appelé à l'aide de <leader> PgUP)

dyler
la source
3
Je ne recommanderais pas l'utilisation <C-c>de sortir du mode insertion en utilisation normale, car elle n'exécute pas la commande InsertLeaveautomatique que certains plug-ins pourraient surveiller. Voir :h i_CTRL-C.
Shrikant Sharat