Ich benutze iTerm2 2.1.1 auf Yosemite. Kein tmux.
Wenn iTerm den Fokus verliert (wenn Sie mit Cmd-Tab zu einer anderen Anwendung wechseln oder auf ein anderes Fenster klicken), wird anscheinend ein ^[[I
und ^[[O
an das Terminal gesendet. Dies führt ^[[I^[[O
dazu, dass in Vim ein oder mehr frustrierend erscheint. Diese Kombination öffnet einen weiteren kleinen Puffer.
Beispiel: Drücken Sie nach dem Start mehrmals die Befehlstaste cat
% cat
^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I
Dies geschieht nur auf iTerm und nicht auf Terminal.app. Es reproduziert sich auch auf bash oder sh, so dass es kein zsh-Problem zu sein scheint. Einige Googler schlugen vor, dass dies ein „Fokus“ -Problem ist, aber was bedeutet „Fokus“ in der Bedeutung eines Terminals, und gibt es eine Möglichkeit, dies zu deaktivieren oder zu vermeiden?
Antworten:
Nach dieser :
Cmd- RZum Zurücksetzen wird die Fokus-Berichterstellung deaktiviert (Dank dieser )
quelle
Cmd-R
ist die magische Sequenz für michIch habe keinen Mac zur Hand, um diese Antwort zu testen, aber ich stoße gelegentlich auf dieses Problem in XTerm unter Linux, und (vorausgesetzt, iTerm2 respektiert die gleichen Steuercodes), finden Sie die unten stehende Lösung möglicherweise hilfreich.
Führen Sie den folgenden Shell-Befehl im Terminal aus, in dem das Problem auftritt:
(Beachten Sie, dass das letzte Zeichen eine 'ell' in Kleinbuchstaben ist.)
Diese ANSI-Steuersequenz entspricht der in Thomas Dickeys Antwort aufgeführten, schaltet jedoch die Funktion aus (und nicht ein). Es sollte Ihr Problem in allen Anwendungen lösen, nicht nur in Vim, indem verhindert wird, dass die Zeichen überhaupt vorkommen.
Unter Linux kann ich diese Steuerungssequenz anhand der folgenden Schritte demonstrieren:
xterm
die Funktion aus und aktivieren Sie sie, indem Sie sie ausführenprintf "\e[?1004h"
.xeyes
eine andere GUI-Anwendung von demselben XTerm aus . (Aus irgendeinem Grund tritt dieser Effekt bei mir erst auf, wenn der betreffende XTerm eine Anwendung startet. Weiß jemand, warum?)^[[O
wie^[[I
das ursprüngliche XTerm "eingetippt" wird.printf "\e[?1004l"
(um die Funktion zu deaktivieren, wie im obigen Fix beschrieben).xeyes
, Fokus wechseln ", diesmal werden jedoch keine Zeichen in das Terminal eingegeben.Ich persönlich sehe dieses Problem nur, wenn ich versehentlich Binärausgaben auf das Terminal kopiert habe. Wenn Sie jedoch häufiger darauf stoßen, möchten Sie diese möglicherweise zum
printf
interaktiven Startskript Ihrer Shell hinzufügen (z~/.bashrc
. B. ). Das Senden des Steuercodes scheint (zumindest unter XTerm) nicht zu schaden, wenn die Funktion bereits deaktiviert ist. Daher sollte es sicher sein, auch wenn dieses Problem nur gelegentlich auftritt.Wenn Sie befürchten, dass Ihre Shell immer diese Ausgabe generiert, weil Sie sie manchmal an Orten verwenden, die mit diesen Steuercodes nicht gut umgehen, oder wenn das Problem manchmal nach dem Starten der Shell ausgelöst wird, ziehen Sie es möglicherweise vor, diese festzulegen Richten Sie einen Alias (z. B. mit
alias focusfix='printf "\e[?1004l"'
) ein, um die manuelle Ausführung zu vereinfachen.quelle
Der Begriff "Fokus" bezieht sich darauf, welches Terminal (oder Fenster) aktuell Tastatur- und Mauseingabeereignisse akzeptiert. Nur einer kann Fokus haben; Es gibt Protokolle, mit denen festgelegt werden kann, wie der Fokus in einer grafischen Umgebung gewonnen und verloren werden kann, deren Erkundung nicht hilfreich wäre.
Aus der Beschreibung (siehe auch Tmux-Anzeige für das aktuelle Fenster, wenn der Fokus wieder hergestellt ist ) geht hervor, dass iTerm2 diese
xterm
Funktion implementiert :Es wird im privaten Modus 1004 aktiviert (hinzugefügt zu xterm in 2007, Patch Nr. 224 ):
und möglicherweise im Zusammenhang mit diesem Patch: Vim - Unterstützung für Fokusberichterstellungsmodus hinzufügen (DECSET / DECRST 1004) funktioniert auf xterm-kompatiblen Terminals , wodurch das gesamte Verhalten von "xterm" -Mausfunktionen in einer Einstellung gleichgesetzt wird :
Sie können dies deaktivieren , indem Sie vim mitteilen, dass Ihr Terminal das xterm mouse-Protokoll nicht verwendet. Der angegebene Patch weist vim an, die FocusIn / FocusOut-Funktion (die normalerweise deaktiviert sein sollte) zu aktivieren. Wenn die Logik fehlerhaft ist, wird die Funktion möglicherweise nach dem Beenden von vim aktiviert.
Obwohl vim die wahrscheinlichste Ursache für die Aktivierung des Modus ist, ist es möglich, dass ein anderes Programm (oder Skript) diesen aktiviert. Wie in einer anderen Antwort vorgeschlagen, können Sie dies eingrenzen, indem Sie die Ausgabe mit dem
script
Programm auf Ihrem Terminal sammeln (einetypescript
Datei erstellen). Das Analysieren kann zeitaufwändig sein (und da diese Site keine Anhänge zu unterstützen scheint, scheint es nicht geeignet zu sein, um eine ausführliche Diskussion anzufordern). Im Allgemeinenunmap
verwandle ich zu diesem Zweck Typoskriptdateien in lesbare Form.quelle
\e\[O
und zu\e\[I
beheben, jedoch nicht in anderen Anwendungen wie cat oder inrails server
(möglicherweise Programmen, die readline verwenden?).Um dieses Problem zu lösen, müssen Sie wissen, welches Programm den Fokusberichtsmodus aktiviert. Sie sollten ein Protokoll erstellen, das mit dem Befehl script (1) aufgezeichnet wurde .
quelle
Ich habe diese Frage gefunden, indem ich versucht habe, mein Terminal zu lösen, in dem "^ @" angezeigt wird, wenn der Fokus verloren gegangen ist.
Nachdem ich die Antworten durchgesehen hatte, ging ich zu den iTerm2-Einstellungen -> Profile -> "Standard" -> Sitzung und deaktivierte das Kontrollkästchen: "Senden Sie im Leerlauf alle 60 Sekunden den ASCII-Code 0".
Problem gelöst, hoffe es hilft jemandem
quelle