Dies ist meine langwierige Antwort, die zwei Hauptprobleme bei der Verwendung von xclip zum Kopieren des Puffers aus einer Remote (ssh) tmux-Sitzung beheben sollte:
1. Nicht reagierender xclip
Bei mir hat @ Grauwolfs Antwort mit xclip
nicht geklappt (macht tmux pane total unempfindlich). Ich habe auf der Tmux-Seite des Arch-Wikis herausgefunden, warum :
xclip könnte auch für diesen Zweck verwendet werden, im Gegensatz zu xsel funktioniert es besser, wenn roher Bitstream gedruckt wird, der nicht zum aktuellen Gebietsschema passt. Trotzdem ist es sinnvoller, xsel anstelle von xclip zu verwenden, da xclip STDOUT nicht schließt, nachdem es aus dem Puffer von tmux gelesen hat. Daher weiß tmux nicht, dass der Kopiervorgang abgeschlossen ist, und wartet weiterhin auf die Beendigung von xclip, wodurch tmux nicht mehr reagiert. Eine Problemumgehung besteht darin, STDOUT von xclip nach / dev / null umzuleiten
Die Bindung sollte also sein:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Dies funktioniert nun, wenn Ihre tmux-Sitzung lokal ist.
2. xclip kann keine Verbindung zu X herstellen
Wenn Sie tmux über ssh -X verwenden , ist die Wahrscheinlichkeit groß, dass dies nicht direkt funktioniert .
Das liegt daran, dass die Shell-Variable $DISPLAY
richtig gesetzt werden muss.
Komplette Lösung
Für mich besteht die vollständige Arbeitslösung darin, die folgenden Zeilen in meine einzufügen ~/.tmux.conf
:
set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null
Zum Einfügen vom primären:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Ich verstehe nicht ganz, warum $DISPLAY
beim Sourcing die Einstellungen nicht korrekt .tmux.conf
sind. Deshalb muss ich sie mit tmux show-env
und extrahieren sed
.
Wenn Sie tmux> = 1.8 haben, können Sie diesen Befehl anpassen mit copy-pipe
:
bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'