Utilice el portapapeles del sistema en modo vi-copy en tmux

51

Estoy ejecutando tmux 1.6 y estoy tratando de configurarlo para usar las combinaciones de teclas de estilo vi, así como también usar el portapapeles del sistema al copiar en modo interactivo:

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

En pocas palabras, me gustaría poder hacer C+ [y luego usar vpara comenzar a seleccionar texto para copiar, luego, cuando yse presione, copie la selección en la selección tmux y luego expórtela al portapapeles del sistema usando xclip.

Desafortunadamente, cuando trato de hacer esto, veo lo siguiente:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

¿Hay alguna manera de hacer esto en la configuración de tmux?

Naftuli Kay
fuente

Respuestas:

87

Esto también fue respondido aquí , pero me tomó un tiempo entender cómo usarlo, así que explicaré a cualquier otra persona que estaba confundida.

Esta es básicamente la configuración que está buscando:

(para versiones tmux <2.5 )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(para versiones tmux > = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

Luego presione Ctrl+b [para ingresar al modo de copia. Luego presione Spaceseguido de las teclas de movimiento vi para hacer una selección. Luego, en lugar de golpear Enter, presione yy la selección se copiará en el portapapeles.

Nota: esto supone que está utilizando los enlaces predeterminados de tmux con las teclas vi.

Tmux tiene diferentes tablas de enlace de teclas para diferentes modos. Entonces, bind-key -t vi-copy yestablece la acción para la yclave en modo copia. Inicialmente, estaba confundido porque estaba acostumbrado a golpear Enterdespués de hacer una selección. Enteren realidad es solo la combinación de teclas predeterminada para el copy-selectioncomando (en modo de copia). El copy-pipecomando nos permite vincular una nueva clave para canalizar la selección a un comando, que en este caso es xclip.

Puede ver todas las asociaciones de teclas para el modo de copia ejecutando list-keys -t vi-copy.

Ben Davis
fuente
Muchas gracias, tuve que descargar y compilar tmux 1.9a, pero no fue tan difícil y ahora simplemente funciona ™.
Naftuli Kay
3
Si no funciona, solo verifique que xclipesté realmente instalado en su sistema (no está instalado de forma predeterminada en Ubuntu, debe sudo apt-get install xclipobtenerlo)
ecerulm
3
Para OSX, reemplace xclipcon pbcopy. Para Cygwin en Windows, reemplácelo con putclip(del cygutils-extrapaquete).
SnoringFrog
55
El siguiente enlace de esta entrada del blog también funciona muy bien en Tmux 2.6 y no tiene la desventaja de poner caracteres aparentemente aleatorios en la pantalla al copiar:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun
1
Esto no estaba funcionando para mí hasta que me quita esta línea de .tmux.conf: set -g mouse on. Se supone que esto permitirá "modo de ratón" pero incluso después de sacarlo todo lo relacionado con mi ratón fina (obras rueda de desplazamiento, funciona la selección del ratón) ... funciona
ndemou
11

La versión actualizada a la respuesta de Ben Davis

compatible con tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
jruz
fuente
44
Me parece que funciona un poco mejor en copy-pipe-and-cancellugar de copy-pipe. Esto está en tmux 2.5
wreckgar23
6

Se encuentra con un par de problemas técnicos: los
enlaces de "modo especial" (por ejemplo vi-copy) ...

  1. usar un conjunto diferente de comandos (es decir, run-shellaka runno está disponible) y
  2. no tienen la capacidad de enlazar múltiples comandos (que normalmente se pueden separar por: el separador de ;comandos del shell &&no está disponible).

tmux 1.8 tiene copy-pipe, lo que podría ayudar sin embargo:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(Hay un enlace como este en las Preguntas frecuentes ).

Chris Johnsen
fuente
1
Tengo tmux 1.8 y esto no parece funcionar. (editar) Ugh, odio las entradas de textarea que se envían en Enter. De todos modos, agregué este enlace de teclas, pero cuando hago <prefijo> -y, y presiono [espacio], el contenido no se copia al portapapeles.
Ben Davis
Solo lo descubrí. No entendí cómo funcionaba la tabla de combinación de teclas "vi-copy".
Ben Davis
5

Eche un vistazo al complemento tmux-yank para tmux. https://github.com/tmux-plugins/tmux-yank

Proporciona una forma automática de copiar / pegar desde tmux al portapapeles del sistema. Funciona en sistemas OSX / Linux / Cygwin.

bergercookie
fuente
Esto funcionó muy bien para mí, ¡gracias por el enlace!
Bryan Henry
2

Para macOS, puede agregar esta línea a .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'

bumaociyuan
fuente
Usuarios de macOS, para tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai
1

Esto es lo que terminó funcionando para mí usando tmux 2.2 y haber instalado xclip. Para copiar estilo Vim, agregue lo siguiente a .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Aquí, en modo de copia, PREFIX v inicia la selección y PREFIX y copia en el portapapeles. PREFIX p se puede usar para pegar en el terminal.

OrigamiEye
fuente