Esta é minha resposta bastante demorada que deve corrigir dois grandes problemas com o uso do xclip para copiar o buffer de uma sessão remota (ssh) tmux:
1. xclip sem resposta
Para mim, a resposta de Grauwolf com xclip
não funcionou (torna o painel tmux totalmente irresponsivo). Eu descobri o porquê na página Tmux do wiki do Arch :
O xclip também pode ser usado para esse fim, ao contrário do xsel, ele funciona melhor na impressão de fluxo de bits bruto que não se encaixa no local atual. No entanto, é melhor usar o xsel em vez do xclip, porque o xclip não fecha o STDOUT depois de ler o buffer do tmux. Como tal, o tmux não sabe que a tarefa de cópia foi concluída e continua aguardando o término do xclip, tornando o tmux sem resposta. Uma solução alternativa é redirecionar o STDOUT do xclip para / dev / null
Portanto, a ligação deve ser:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Agora, isso funcionará se a sua sessão do tmux for local.
2. xclip incapaz de se conectar ao X
Se você estiver usando o tmux over ssh -X , há grandes chances de isso não funcionar diretamente.
Isso ocorre porque a variável shell $DISPLAY
precisa ser definida corretamente.
Solução completa
Então, para mim, a solução de trabalho completa é colocar as seguintes linhas no meu ~/.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
Para colar do primário:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Eu não entendo completamente por que $DISPLAY
não está definido corretamente durante a fonte .tmux.conf
, então é por isso que tenho que extraí-lo com tmux show-env
e sed
.
Se você possui tmux> = 1.8, pode adaptar este comando com 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'