Ich habe vor kurzem angefangen, tmux zu verwenden (war vorher ein Bildschirmbenutzer) und ich liebe es, bis auf ein kleines Problem. Ich benutze Emacs in meiner tmux-Sitzung und bin es gewohnt, mit den Umschalt-Pfeiltasten zwischen Emacs-Fenstern zu wechseln (nicht zwischen tmux-Fenstern). Unter tmux scheinen diese Bindungen nicht mehr zu funktionieren (es ist, als würden sie sich überhaupt nicht bei Emacs registrieren). Wenn ich tmux beende und nur Emacs in meiner Shell starte, funktionieren sie einwandfrei.
Ich benutze iTerm2, ssh'd in eine Linux-Box, tmux / emacs läuft dort. In meinen .emacs sind die Umschalt-Pfeiltasten wie folgt eingerichtet:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Wenn ich nicht in tmux laufe, kann ich bestätigen, dass dies die richtigen Zeichenfolgen für die Umschalt-Pfeil-Tastenkombinationen sind, indem ich Cq in Emacs mache und dann die Tastenfolge drücke. In tmux funktioniert das auch nicht, weil es keine Eingaben durch Drücken der Umschalt-Pfeiltaste zu sehen scheint (es befindet sich nur an der Cq-Eingabeaufforderung).
Wenn ich mir die Tastenkombinationen für tmux anschaue, glaube ich nicht, dass irgendetwas an Shift-Pfeiltasten gebunden ist, und selbst wenn dies der Fall wäre, würden sie sich erst nach Eingabe des Präfixes (das in meinem Fall an Co gebunden ist) registrieren.
Hast du eine Idee, wie die Shift-Pfeiltasten in tmux wieder funktionieren sollen?
Antworten:
Stellen Sie zunächst sicher, dass Ihr TERM an jedem Ort korrekt ist:
xterm
-Etwas (zBxterm-256color
) in Ihrer lokalen Shell, das in Ihrem iTerm2- Fenster ausgeführt wirdxterm
-etwas in Ihrer Shell nach dem SSH-Wechsel zum Linux-SystemDies sollte dasselbe sein wie das, was Sie lokal in iTerm2 verwenden , da SSH es an die Remote-Seite weiterleiten sollte (und vor allem sollte die Remote-Seite das nicht blind überschreiben Wert in einer Shell-Initialisierungsdatei).
screen
-etwas (z. B.screen-256color
) in Ihrer Shell, das unter tmux auf dem Linux-System ausgeführt wirdSie sollten
screen
in tmux immer einen -basierten TERM verwenden .Eine Having
xterm
TERM unmittelbar außerhalb tmux ermöglicht tmux die modifizierte Pfeiltasten zu erkennen, aber es wird ihnen nicht passieren , wenn Sie auch die habenxterm-keys
auf Fenster Option eingeschaltet. Fügen Sie dies in Ihr~/.tmux.conf
Linux-System ein:Die Sequenzen für die verschobenen Tasten sollten nun zu Emacs gelangen , der in tmux über eine SSH-Verbindung in einem iTerm2- Fenster ausgeführt wird.
quelle
export XTERM=xterm-256color
(Ich schreibe dies, weil ich nicht wusste, was "Ihr BEGRIFF" in der Antwort bedeutet. Ich suchte nach einem Kommentar, der erklärt, dass ... es keinen gab und jetzt gibt es einen.)Zuerst müssen Sie
xterm-keys
in Ihrer tmux-Konfiguration aktivieren. Geben Sie also Folgendes ein~/.tmux.conf
Dies kann jedoch zu Problemen mit anderen Tastenkombinationen führen. Um sie zu beheben, fügen Sie Folgendes in Ihre
~/.emacs
oder~/.emacs.d/init.el
Konfiguration einAuch ich habe meine Lösung im Archlinux-Wiki
quelle
Die tmux-FAQ enthielten den folgenden Eintrag :
Ich habe die tmux- Ausgabe Nr. 1349 geöffnet , um die Wiederherstellung für den FAQ-Eintrag anzufordern.
quelle
Im Allgemeinen treten solche Probleme auf, weil die vom Terminalemulator gesendeten Daten nicht mit den von der Clientanwendung erwarteten Daten übereinstimmen.
Verschiedene Terminalemulatoren sind unterschiedlich anpassbar. Daher ist es erforderlich, sich mit den Emulations-Tunables eines bestimmten Terminals vertraut zu machen.
Clientanwendungen hängen von dem Wert ab, mit
$TERM
dem die Funktionen des Terminals (Emulators) in derterminfo
(odertermcap
) Datenbank gesucht werden.In Ihrem Fall verwenden Ihre Emacs-Bindungen daher explizite Sequenzen,
$TERM
und terminfo ist irrelevant: Es wird ein bestimmter Terminal-Emulator erwartet - wie Sie bereits herausgefunden haben, einxterm
-kompatibler.quelle