Je n'ai pas de Mac à portée de main pour tester cette réponse, mais je rencontre ce problème dans XTerm sous Linux très occasionnellement et (en supposant que iTerm2 respecte les mêmes codes de contrôle), vous pouvez trouver le correctif ci-dessous utile.
Exécutez la commande shell suivante à l'intérieur du terminal où vous voyez le problème:
printf "\e[?1004l"
(Notez que le dernier caractère est un «ell» en minuscule.)
Cette séquence de contrôle ANSI est similaire à celle répertoriée dans la réponse de Thomas Dickey, mais elle désactive la fonction (plutôt que la réactiver). Il devrait résoudre votre problème dans toutes les applications, pas seulement Vim, en empêchant les personnages de se produire.
Sous Linux, je peux démontrer cette séquence de contrôle en utilisant les étapes suivantes:
- Exécutez
xterm
et activez la fonctionnalité en l'exécutant printf "\e[?1004h"
.
- Exécutez
xeyes
ou une autre application graphique à partir de ce même XTerm . (Pour une raison quelconque, cet effet ne se produit pas jusqu'à ce que l'XTerm en question lance une application. Quelqu'un sait pourquoi?)
- Basculez à plusieurs reprises le focus dans et hors de l'XTerm d'origine (par exemple en cliquant sur les fenêtres) et voyez
^[[O
et ^[[I
être "tapé" dans l'XTerm d'origine.
- Fermez maintenant Xeyes, revenez à l'XTerm d'origine et exécutez
printf "\e[?1004l"
(pour désactiver la fonction, comme décrit dans le correctif ci-dessus).
- Répétez les étapes « exécuter
xeyes
, changer de focus » ci-dessus, mais cette fois, aucun caractère n'est entré dans le terminal.
Personnellement, je ne vois ce problème que si j'ai vidé par inadvertance la sortie binaire vers le terminal, mais si vous le rencontrez plus régulièrement, vous voudrez peut-être l'ajouter printf
au script de démarrage interactif de votre shell (par exemple ~/.bashrc
). Il ne semble pas y avoir de mal (sous XTerm au moins) à envoyer le code de contrôle si la fonctionnalité est déjà désactivée, donc cela devrait être sûr même si vous ne voyez que ce problème parfois.
Si vous êtes préoccupé par le fait que votre shell génère toujours cette sortie, peut-être parce que vous l'utilisez parfois dans des endroits qui ne gèrent pas bien ces codes de contrôle, ou si le problème est parfois déclenché après le démarrage du shell, alors vous préférerez peut-être définir un alias (par exemple avec alias focusfix='printf "\e[?1004l"'
) pour le rendre plus pratique à exécuter manuellement.