Estoy tratando de encontrar una manera decente de copiar lo que tengo en un búfer tmux en mi portapapeles. He intentado un par de cosas diferentes como
bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer
lo que me acerca bastante, todo lo que tengo que hacer es presionar control-d después de hacer el prefijo-p.
Traté de arreglar eso haciendo
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'
Pero eso simplemente no funciona. De hecho, si emparejo esto a solo
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'
no hace nada, así que supongo que a la ventana dividida no le gusta << en un comando de shell.
¿Algunas ideas?
Editar: puede omitirlo select-pane -t 2
si lo desea, no es realmente importante. Solo uso un diseño específico y el panel 2 es el que prefiero dividir cuando hago otra cosa para que mis enlaces impliquen divisiones de forma predeterminada.
keyboard-shortcuts
tmux
clipboard
xclip
Poderes digitales
fuente
fuente
Respuestas:
Aquí los documentos necesitan nuevas líneas. Por ejemplo, en un script de shell, puede escribir
No creo que tmux le permita poner nuevas líneas allí, e incluso si lo hiciera, este no sería un buen enfoque. ¿Qué sucede si los datos en sí contienen
HERE
solo en una línea (por ejemplo, porque está copiando su.tmux.conf
)?Sugiero escribir el contenido del búfer en un archivo temporal. No probado:
Hay una condición de carrera si usa este comando en dos instancias de tmux separadas. No se como resolver esto.
fuente
mktemp
que está ampliamente disponible$PPID
en un shell lanzado por tmux). Pero, ¿cómo se obtiene el nombre de archivo variable (sin embargo, está construido) en el argumento desave-buffer
? Supongo quesave-buffer - | …
como en la respuesta de Grauwolf , que elimina un archivo temporal por completo?Esto debería funcionar:
fuente
TMUX
variables de entorno.C-p
sería:bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
- no hay problemas de citas o problemas de límite de línea de comando.copy-mode
?xclip -o
la opción no funcionó para mí, así que he cambiado abind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Una solución más simple para Mac OS-X
Esto se basa en la respuesta de Alex y usa cosas que no existían en ese momento.
Si está usando homebrew (y si no lo está, ¿por qué no lo hace?), Puede hacer esto:
Luego en tu
~/.tmux.conf
:Para copiar el búfer de tmux (ya debería haber copiado algo usando tmux) en el tablero de Mac, use
<tmux-key> Control-c
. Ahora estará disponible paraCommand-v
opbpaste
Para pegar algo del tablero de Mac, use
<tmux-key> Control-v
.fuente
tmux show-buffer
que causó problemas de ajuste de línea lotmux save-buffer -
resolvió.-
al final detmux save-buffer -
hacer?save-buffer
stdout. Puede reemplazarlo-
con un nombre de archivo y lo guardará allí. Esto le impide escribir (y tener que limpiar) un archivo.El
copy-pipe
comando se agregó a partir de la versión 1.8. Copia una selección al búfer tmux y la canaliza a un comando. Ahora no hay necesidad de un enlace de prefijo. Aquí hay un ejemplo:Ahora, cuando haya seleccionado algún texto
copy-mode
, ycopiará ese texto en el búfer tmux y en el portapapeles del sistema operativo. Sin embargo, no ayuda si desea obtener texto del portapapeles al búfer tmux.fuente
reattach-to-user-namespace
que no es necesario.bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"
y para OS X:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Es posible que desee probar el complemento tmux-yank . Permite copiar directamente al portapapeles del sistema (OS X y Linux) y algunas otras ventajas como quitar la línea de shell actual.
fuente
Después de probar una solución diferente, aquí está mi configuración final:
El uso de save-buffer en lugar de show-buffer proporciona los datos reales sin los datos que se muestran con saltos de línea cuando se encuentra en divisiones.
También lo uso para comenzar la selección / copia en el modo de copia tmux:
Supongo que podría ser posible fusionar la selección de copias con la tecla 'y' Y moverla al portapapeles x.
fuente
Aquí hay un intento de una respuesta integral.
Primero un poco de historia
Cuando se hizo esta pregunta por primera vez (junio de 2011), copiar texto de Tmux al portapapeles tenía que ser un proceso de dos pasos, primero copie el texto seleccionado al búfer de Tmux, luego copie el texto del búfer de Tmux al portapapeles del sistema.
En 1.8 (marzo de 2013)
copy-pipe
se agregó el comando que le permite copiar el texto seleccionado directamente en el portapapeles del sistema (u otro destino).Luego, en 2.4 (abril de 2017), las tablas clave cambiaron significativamente, lo que dejó obsoletas muchas de las respuestas en esta página.
Respondiendo la pregunta original
Linux :
Mac :
Si está utilizando homebrew , debe instalarlo
reattach-to-user-namespace
ejecutando el siguiente comando en una terminal:Luego en su ~ / .tmux.conf:
El método más corto (copie y pegue una selección directamente desde y hacia el portapapeles para tmux> 2.4)
Nota: hay dos versiones para Linux porque Linux tiene un portapapeles primario y secundario (también conocido como selección).
Linux :
Mac :
Personalizando estos comandos
Si no desea que el comando le diga qué hizo en la línea de estado, simplemente elimine el
display-message
(así como el\;
que viene antes).Si está utilizando el modo de copia de estilo Emacs en lugar de vi, reemplace cualquier instancia de
copy-mode-vi
con solocopy-mode
Si está ejecutando Linux y desea usar en
xsel
lugar dexclip
reemplazarxclip -r
conxsel -i -p
yxclip -o
conxsel -o -p
El
-r
dexclip -r
es opcional, se elimina el último salto de línea. Es útil para copiar comandos, luego, cuando los pegue, no se ejecutarán de inmediato.Si está haciendo un túnel sobre SSH, debe consultar https://unix.stackexchange.com/a/354581/14252
Referencias
> /dev/null
copiar el búfer tmux en el portapapeles, tmux no responderá a los atajosfuente
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
, sigue siendo válido? paratmux>2.4
No me gusta tener pulsaciones de teclas adicionales, así que quería algo más ambicioso. Ingrese al modo de copia con [, resalte el texto correcto y luego presione] para copiar el texto en el portapapeles.
Además, a tmux le gusta incluir nuevas líneas en las expresiones que se ajustan (¡y curiosamente esas nuevas líneas están en el lugar equivocado ! No están donde la expresión se ajusta en la pantalla). Entonces quería que C-] copiara la expresión eliminando las nuevas líneas.
En tmux 1.6 probé esto:
pero eso no funcionó porque tmux no parece feliz de vincular cosas complejas a la tabla vi-copy. Así que terminé haciendo esto en su lugar:
Esto lleva a cosas extrañas (] o C-] actuará de manera extraña la próxima vez que las use, pero solo una vez) si sale del modo de copia de otra manera además de] o C-]. Esto podría solucionarse con algunos enlaces más que imagino, pero esto hace lo que quiero la mayor parte del tiempo.
fuente
Hay una solución en Arch Wiki usando
xclip
:https://wiki.archlinux.org/index.php/Tmux
fuente
save-buffer
archivo de forma segura en un directorio compartido? De lo contrario, ponerlo/tmp
es un agujero de seguridad. Hay un uso inútilcat
y falta la eliminación del archivo temporal. Entonces es una cuestión dexsel
vsxclip
, que son equivalentes aquí, y tienes mi solución (escrita independientemente).Una solución para Mac OS X. Siga estos 2 pasos:
Utilice la solución alternativa de Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
Agregue este código a su configuración de tmux (~ / .tmux.conf)
fuente
Una variante ligeramente modificada de la respuesta aceptada, que preparé.
También prefiero usar el portapapeles del sistema (Ctrl-C, Ctrl-V) además del
primary
portapapeles predeterminado de xclip (el que obtienes con la selección del mouse y los clics medios del mouse). Para elegir el portapapeles del sistema, debe pasar-selection clipboard
argumentos axclip
.Además, al copiar un búfer en un portapapeles, me gusta la posibilidad de elegir qué búfer quiero copiar. Se hace usando
choose-buffer
y luego pasando el argumento al buffer parasave-buffer
usar-b %%
.ACTUALIZACIÓN: De alguna manera con tmux 1.8 y dos de mis instalaciones de openSUSE 12.2, veo un bloqueo cuando
tmux run-shell
se invoca con laxclip
lectura de stdin sobre una tubería. En cambio, decidíxsel
intentarlo y eso parece funcionar. Estas son las combinaciones de teclas equivalentes que se utilizanxsel
. También solía&&
encadenar los comandos en pegar para mayor robustez.fuente
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 :Entonces el enlace debe ser:
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
:Para pegar desde primaria:
No entiendo completamente por qué
$DISPLAY
no está configurado correctamente durante el abastecimiento.tmux.conf
, así que es por eso que tengo que extraerlo contmux show-env
ysed
.Si tiene tmux> = 1.8, puede adaptar este comando con
copy-pipe
:fuente
/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
sed
comando que muestra no es el mismo que escribí ... ¿Es esto lo que escribió en su.tmux.conf
?sed
? El comando debe ser:sed -n s/^DISPLAY=//p
. Alternativamente, se puede utilizarcut
:tmux show-env DISPLAY | cut -d'=' -f2
. También podría valer la pena revisar su versión de tmux.Para los enlaces de estilo emacs hay algunas opciones diferentes. (¿El estilo Vi debería ser similar?) El enlace típico para hacer "selección de copia" en emacs es Mw, por lo que sería muy conveniente tener el mismo enlace en tmux.
1 - Sería ideal, pero no funciona (¿debido a la limitación de tmux?)
2 - Compromiso que funciona bien para mí : acepte usar una combinación de teclas diferente para emacs-copy en tmux. Utilice por ejemplo CMw. (Este enlace, que se definirá "globalmente", no solo en modo copia, sino también útil en modo copia)
fuente
Muchas de estas respuestas no funcionaron para mi Ubuntu 14.04 en zsh tal cual. No estoy seguro de si mi shell tuvo algo que ver con eso, pero aquí está mi versión funcional del uso de esta estrategia para copiar y esta estrategia para pegar.
Algunas notas:
-sel clip -i
. Esa línea combina el búfer yank to tmux y lo envía a xclip.-sel clip -o
Esto funciona muy bien ahora para mi configuración vim / zsh / tmux.
fuente
-sel clip -i
resuelve el problema Aunque, yo no entiendo por qué es necesario especificar de nuevo portapapeles para pegarlo (estándar]
funciona para mí)Y la versión mejorada de la respuesta @Leif podría ser:
De esta manera no hay consecuencias si sale del modo de copia de otra manera además], el código anterior está envuelto en tundle / tmux-yank un complemento tmux para copiar texto tmux en el portapapeles del sistema, apunta tmux> = 1.6 en OS X y Linux
fuente
En OS-X con tmux versión 2.2 o posterior, funcionará lo siguiente:
fuente
Yo uso
copyq
un administrador de portapapeles multilínea. (Funciona con Windows, OSX, Linux).Agregue las siguientes líneas en
~/.tmux.conf
:cygwin
exigecopyq.exe
ubicación en~/.bashrc
:fuente