Questa è la mia risposta piuttosto lunga che dovrebbe risolvere due problemi principali con l'uso di xclip per copiare il buffer da una sessione tmux remota (ssh):
1. Xclip non rispondente
Per me la risposta di @ Grauwolf con xclip
non ha funzionato (rende il riquadro di tmux totalmente irresponsabile). Ho scoperto perché nella pagina Tmux della wiki di Arch :
xclip potrebbe anche essere usato a tale scopo, a differenza di xsel funziona meglio sulla stampa di bitstream grezzi che non si adattano alla locale corrente. Tuttavia, è meglio usare xsel invece di xclip, perché xclip non chiude STDOUT dopo aver letto dal buffer di tmux. Di conseguenza, tmux non sa che l'attività di copia è stata completata e continua ad attendere la chiusura di xclip, rendendo quindi tmux non rispondente. Una soluzione alternativa è reindirizzare STDOUT di xclip su / dev / null
Quindi l'associazione dovrebbe essere:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Ora funzionerà se la tua sessione tmux è locale.
2. xclip non è in grado di connettersi a X
Se stai usando tmux su ssh -X , ci sono grandi probabilità che questo non funzioni direttamente.
Questo perché la variabile di shell $DISPLAY
deve essere impostata correttamente.
Soluzione completa
Quindi per me, la soluzione di lavoro completa è quella di inserire le seguenti righe nel mio ~/.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
Per incollare dal primario:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Non capisco perfettamente perché $DISPLAY
non sia impostato correttamente durante l'approvvigionamento .tmux.conf
, quindi è per questo che devo estrarlo con tmux show-env
e sed
.
Se hai tmux> = 1.8, puoi adattare questo comando con 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'