In tmux 2.0 können Sie einfach diese 2 Zeilen in Ihren .tmux.conf
einfügen :
bind -n End send-key C-e
bind -n Home send-key C-a
Das Hauptproblem scheint die Verwendung von xterm-256color für $TERM zu sein. Ich habe $TERM auf screen-256color umgestellt und das Problem ist verschwunden.
Wenn Sie aus irgendeinem Grund bei xterm-256color in tmux bleiben möchten, verwenden Sie die Arch-Lösung mit inputrc. Ich habe es in tmux mit rxvt getestet, ruby irb, python, lua und home/end key sind ok. Wahrscheinlich ist jede Readline-App in Ordnung.
Aus dem Arch-Wiki:
Das Wichtigste zuerst:
Setzen Sie $TERM nicht manuell - lassen Sie das das Terminal machen.
Viele Befehlszeilenanwendungen verwenden die Readline-Bibliothek zum Lesen von Eingaben. Die richtige Konfiguration von Readline kann also in vielen Fällen Home und End beheben.
Die Standarddatei /etc/inputrc enthält keine Zuordnung für die Home-/End-Tasten.
Um zu überprüfen, wie die ausgegebene Escape-Sequenz für diese Tasten lautet:
1. Ctrl + V
2. Home
3. Spacebar
4. Ctrl + V
5. End
dies wird wahrscheinlich ausgeben:$ ^[[1~ ^[[4~
. Sie müssen also eine Zuordnung für diese Sequenzen zu Ihrem inputrc hinzufügen (/etc/inputrc, um global zu sein, oder nur für Ihren Benutzer ~/.inputrc):
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Fügen Sie Folgendes zu Ihrem .tmux.conf
hinzu :
bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"
Und du bist fertig!
Erklärung
Nachdem ich jede dieser und mehrere andere, die ich beim Lesen anderer Antworten und Dokumentationen gesehen hatte, ausprobiert hatte, funktionierte dies schließlich für mich in jedem Szenario, das ich darauf warf. Ich kann Ihnen nicht dasselbe versprechen, da die Szenarien bei jedem anders sind, aber am Ende habe ich Folgendes herausgefunden.
Dies wurde entdeckt, nachdem derselbe Versuch/Fehler und dieselbe Logik aus einem einigermaßen relevanten Artikel eingeführt wurden, der nicht mehr verfügbar ist. Der Schlüssel ist, wo die Übersetzung stattfindet; in meinem Fall geschieht dies innerhalb meiner .tmux.conf
, statt .bashrc
oder .zshrc
(Hauptsächlich, weil mein Zuhause/Ende außerhalb von tmux
gut funktionierte )
Fehlerbehebung
Sie können dieses Problem mit cat -v
beheben .
Führen Sie cat -v
aus , und drücken Sie dann die Startseite und Ende Schlüssel. Beenden mit Strg +C .
$ cat -v
So sah meine Ausgabe in tmux using zsh
aus , zsh
, und bash
:
tmux
➜ ~ cat -v
^[[1~^[[4~^C
zsh
➜ ~ cat -v
^[[H^[[F
Bash
bash-3.2$ cat -v
^[[H^[[F
Lösung
Vergleichen Sie die obigen Beispiele mit dem, was wir erwarten, indem Sie tput
paaren mit cat -v
:
$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF
Schlussfolgerung
Denn dieses Problem besteht ausschließlich innerhalb von tmux
, und nicht in den Shells selbst, habe ich mich dafür entschieden, die Bindungsänderungen stattdessen in der tmux-Konfiguration vorzunehmen. Durch Verwendung von bind-key
gepaart mit send
, können wir den Escape
verwenden Schlüsselwort gepaart mit der Sequenz, die wir für unsere Übersetzung erreichen möchten. Also:
bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE
Dieser Debugging- und Lösungsprozess kann auf alle anderen wichtigen Übersetzungsprobleme angewendet werden. Aber mach dich nicht verrückt. Einige Tasten sind aus einem bestimmten Grund bestimmten Escape-Sequenzen zugeordnet. Beachten Sie, wie bash
und zsh
erhielt den ^[[H
Sequenz für Home statt ^[OH
; Es wird wahrscheinlich nicht empfohlen, dies in unserem .zshrc
zu überschreiben es sei denn, wir haben in zsh
größere Probleme damit .