Oto moja dość długa odpowiedź, która powinna rozwiązać dwa główne problemy z użyciem xclipa do skopiowania bufora ze zdalnej (ssh) sesji tmux:
1. Nieodpowiedzialny xclip
Dla mnie @ Grauwolf za odpowiedź z xclip
nie działa (renderuje tmux okienku całkowicie flegmatyczny). Dowiedziałem się, dlaczego na stronie Tmux Arch Arch :
W tym celu można również użyć xclip, w przeciwieństwie do Xsel, działa lepiej w przypadku drukowania surowego strumienia bitów, który nie pasuje do bieżących ustawień regionalnych. Niemniej jednak rozsądniej jest używać xsel zamiast xclip, ponieważ xclip nie zamyka STDOUT po odczytaniu z bufora tmux. Jako taki, tmux nie wie, że zadanie kopiowania zostało zakończone, i nadal czeka na zakończenie xclipa, co powoduje, że tmux nie odpowiada. Obejściem tego problemu jest przekierowanie STDOUT xclipa do / dev / null
Wiązanie powinno być:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
To zadziała, jeśli twoja sesja tmux jest lokalna.
2. xclip nie może połączyć się z X
Jeśli używasz tmux nad ssh -X , są duże szanse, że to nie zadziała bezpośrednio.
Jest tak, ponieważ zmienna powłoki $DISPLAY
musi być ustawiona poprawnie.
Kompletne rozwiązanie
Więc dla mnie kompletnym działającym rozwiązaniem jest umieszczenie następujących wierszy w moim ~/.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
Do wklejenia z podstawowego:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Nie do końca rozumiem, dlaczego $DISPLAY
nie jest poprawnie ustawiony podczas pozyskiwania .tmux.conf
, dlatego muszę go wyodrębnić za pomocą tmux show-env
i sed
.
Jeśli masz tmux> = 1.8, możesz dostosować to polecenie za pomocą 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'