Voici ma réponse plutôt longue qui devrait résoudre deux problèmes majeurs liés à l'utilisation de xclip pour copier le tampon à partir d'une session tmux distante (ssh):
1. xclip irresponsif
Pour moi, la réponse de @ Grauwolf avec xclip
n'a pas fonctionné (rend le volet tmux totalement irresponsable). J'ai découvert pourquoi dans la page Tmux du wiki Arch :
xclip pourrait également être utilisé à cette fin. Contrairement à xsel, il fonctionne mieux pour imprimer du flux binaire brut qui ne correspond pas aux paramètres régionaux actuels. Néanmoins, il est préférable d'utiliser xsel au lieu de xclip, car xclip ne ferme pas STDOUT une fois qu'il a lu le tampon de tmux. En tant que tel, tmux ne sait pas que la tâche de copie est terminée et continue d'attendre la fin de xclip, rendant ainsi tmux inactif. Une solution de contournement consiste à rediriger STDOUT de xclip vers / dev / null
Donc, la liaison devrait être:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Maintenant, cela fonctionnera si votre session tmux est locale.
2. xclip incapable de se connecter à X
Si vous utilisez tmux sur ssh -X , il y a de grandes chances que cela ne fonctionne pas directement.
C'est parce que la variable shell $DISPLAY
doit être définie correctement.
Solution complète
Donc, pour moi, la solution de travail complète consiste à mettre les lignes suivantes dans mon ~/.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
Pour coller depuis le primaire:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Je ne comprends parfaitement pourquoi $DISPLAY
n'est pas correctement en approvisionnement .tmux.conf
, donc c'est pourquoi je dois l' extraire avec tmux show-env
et sed
.
Si vous avez tmux> = 1.8, vous pouvez adapter cette commande avec 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'