J'utilise iTerm2 2.1.1 sur Yosemite. Pas de tmux.
Lorsque iTerm perd le focus (lorsqu'il est basculé vers une autre application par Cmd-Tab ou en cliquant sur une autre fenêtre), un ^[[I
et ^[[O
semble être envoyé au terminal. Cela fait ^[[I^[[O
apparaître un, ou plus frustrant, dans Vim, cette combinaison ouvre un autre petit tampon.
Exemple: appuyer plusieurs fois sur Cmd-Tab après le démarrage cat
% cat
^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I
Cela ne se produit que sur iTerm et non sur Terminal.app. En outre, il se reproduit sur bash ou sh, il ne semble donc pas être un problème zsh. Certains googleurs ont suggéré qu'il s'agissait d'un problème de «concentration», mais qu'est-ce que la «concentration» dans le sens d'un terminal, et existe-t-il un moyen de désactiver ou d'éviter cela?
Réponses:
Selon ceci :
Cmd- Rréinitialiser désactivera les rapports de focus (grâce à cela )
la source
Cmd-R
est la séquence magique pour moiJe 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:
(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:
xterm
et activez la fonctionnalité en l'exécutantprintf "\e[?1004h"
.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?)^[[O
et^[[I
être "tapé" dans l'XTerm d'origine.printf "\e[?1004l"
(pour désactiver la fonction, comme décrit dans le correctif ci-dessus).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.la source
Le terme « concentration » fait référence à laquelle terminal (ou fenêtre) est en cours d' acceptation clavier et des événements d' entrée de souris. Un seul peut avoir le focus; il existe des protocoles pour établir comment gagner et perdre le focus dans un environnement graphique qu'il ne serait pas utile d'explorer.
D'après la description (voir également l'indicateur du volet actuel de Tmux lorsque le focus est rétabli), il apparaît que iTerm2 implémente cette
xterm
fonctionnalité:Il est activé par le mode privé 1004 (ajouté à xterm en 2007, patch # 224 ):
et peut être lié à ce correctif: Vim - Ajout de la prise en charge du mode de rapport de mise au point (DECSET / DECRST 1004) fonctionne sur les terminaux compatibles xterm , ce qui équivaut à tous les comportements des fonctionnalités de la souris "xterm" dans un seul paramètre:
Donc ... vous pouvez désactiver cela en disant à vim que votre terminal n'utilise pas le protocole de la souris xterm. Le patch cité indique à vim d'activer la fonctionnalité FocusIn / FocusOut (qui devrait normalement être désactivée), et s'il y a un défaut dans sa logique, peut laisser la fonctionnalité activée après avoir quitté vim.
Bien que vim soit la cause la plus probable de l'activation du mode, il est possible qu'un autre programme (ou script) l'active. Comme suggéré dans une autre réponse, vous pouvez réduire cela en collectant la sortie vers votre terminal à l'aide du
script
programme (production d'untypescript
fichier). Analyse qui peut prendre beaucoup de temps (et comme ce site ne semble pas prendre en charge les pièces jointes , il ne semble pas approprié de solliciter une discussion détaillée). J'utilise généralementunmap
pour transformer des fichiers dactylographiés en forme lisible à cet effet.la source
\e\[O
et de\e\[I
résoudre ce problème dans Vim, mais pas dans d'autres applications comme cat ou inrails server
(peut-être des programmes utilisant readline?).Pour résoudre ce problème, vous devez savoir quel programme active le mode de rapport de focus. Vous devez prendre un journal enregistré par la commande script (1) .
la source
J'ai trouvé cette question en essayant de résoudre mon terminal affichant "^ @" lorsque le focus était perdu.
En lisant les réponses, j'ai essayé d'aller dans les préférences iTerm2 -> Profils -> "Par défaut" -> Session et décocher: "En cas d'inactivité, envoyer le code ASCII 0 toutes les 60 secondes"
Problème résolu, j'espère que cela aide quelqu'un
la source