Esta es mi respuesta bastante larga que debería solucionar dos problemas principales con el uso de xclip para copiar el búfer de una sesión tmux remota (ssh):
1. xclip irresponsable
Para mí, la respuesta de @ Grauwolf con xclip
no funcionó (hace que tmux pane sea totalmente irresponsable). Descubrí por qué en la página Tmux de la wiki de Arch :
xclip también podría usarse para ese propósito, a diferencia de xsel, funciona mejor en la impresión de flujo de bits sin formato que no se ajusta a la configuración regional actual. Sin embargo, es mejor usar xsel en lugar de xclip, porque xclip no cierra STDOUT después de leer del búfer de tmux. Como tal, tmux no sabe que la tarea de copia se ha completado y continúa esperando la finalización de xclip, lo que hace que tmux no responda. Una solución alternativa es redirigir STDOUT de xclip a / dev / null
Entonces el enlace debe ser:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Ahora, esto funcionará si su sesión tmux es local.
2. xclip no puede conectarse a X
Si está utilizando tmux sobre ssh -X , hay grandes posibilidades de que esto no funcione directamente.
Esto se debe a que la variable de shell $DISPLAY
debe establecerse correctamente.
Solución completa
Entonces, para mí, la solución de trabajo completa es poner las siguientes líneas en mi ~/.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 pegar desde primaria:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
No entiendo completamente por qué $DISPLAY
no está configurado correctamente durante el abastecimiento .tmux.conf
, así que es por eso que tengo que extraerlo con tmux show-env
y sed
.
Si tiene tmux> = 1.8, puede adaptar este 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'