Cómo copiar y pegar con un mouse con tmux

44

Estoy usando tmuxy OSX. Al copiar y pegar desde la terminal, tmuxpuedo mantener presionada Optiony seleccionar texto. Sin embargo, no puedo hacer que el texto permanezca dentro del panel. Entonces, cuando quiero copiar texto, necesito alternar el panel hacia el extremo izquierdo o hacer zoom en el panel, como se muestra a continuación.

Esto además de tener que mantener presionada la Optiontecla es un dolor. Sé que puedo ingresar al modo visual y usar movimientos vim para llegar allí, pero prefiero tener una forma de usar mi mouse. ¿Alguien ha encontrado una solución para esto?

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

mbigras
fuente
"Sin embargo, no puedo hacer que el texto permanezca dentro del panel". ¿Qué quiere decir con esto?
Blaszard

Respuestas:

36

Pon este bloque de código en tu ~/.tmux.conf. Esto permitirá la integración del mouse, permitiéndole copiar desde un panel con el mouse sin tener que hacer zoom.

set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -t vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down

# To copy, drag to highlight text in yellow, press Enter and then release mouse
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "pbcopy"

Después de eso, reinicie su sesión de tmux. Resalte un poco de texto con el mouse, pero no suelte el mouse. Ahora, mientras el texto todavía está resaltado y presionado el mouse, presione la tecla de retorno. El texto resaltado desaparecerá y se copiará en su portapapeles. Ahora suelta el mouse.

Además de esto, también hay algunas cosas interesantes que puede hacer con el mouse, como desplazarse hacia arriba y hacia abajo, seleccionar el panel activo, etc.

Si está utilizando una versión más nueva de tmux en macOS, intente lo siguiente en lugar de la anterior:

# macOS only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

Si usa iTerm en macOS, vaya a iTerm2> Preferencias> pestaña "General", y en la sección "Selección", marque "Las aplicaciones en la terminal pueden acceder al portapapeles".

Y si está utilizando Linux y una versión más nueva de tmux, entonces

# Linux only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

(También puede consultar https://github.com/gpakosz/.tmux para muchas otras opciones de tmux).

GMaster
fuente
1
Finalmente algo que realmente funciona! Copiar y pegar es la cosa más molesta con probar tmux, ya me di por vencido antes y los fragmentos de configuración que estaba probando se comportaban de manera inconsistente, muchas gracias.
Breno Salgado
1
Estaba usando iterm en mac y tuve que habilitar iTerm2> Preferencias> pestaña "General", y en la sección "Selección", "Las aplicaciones en la terminal pueden acceder al portapapeles". Referencia: rushiagr.com/blog/2016/06/16/…
Rujoota Shah
@RujootaShah Sí, eso es correcto. Necesitas hacer eso. Gracias por compartir.
GMaster
1
¡Gracias! Funciona de maravilla. Sin sudo apt-get install -y xclipembargo, necesitaba instalar (Ubuntu Linux).
Petr
funciona perfectamente, gracias @GMaster
Luja Shrestha