Como copiar e colar com um mouse no tmux

44

Eu estou usando tmuxe OSX. Ao copiar e colar do terminal, consigo tmuxmanter pressionado Optione selecionar o texto. No entanto, não consigo manter o texto dentro do painel. Portanto, quando eu quero copiar texto, preciso alternar o painel para a extrema esquerda ou aumentar o zoom, como mostrado abaixo.

Isso, além de ter que pressionar a Optiontecla, é uma dor. Sei que posso entrar no modo visual e usar os movimentos do vim para chegar lá, mas prefiro ter uma maneira de usar o mouse. Alguém encontrou uma solução alternativa para isso?

insira a descrição da imagem aqui insira a descrição da imagem aqui

mbigras
fonte
"No entanto, não consigo fazer com que o texto fique dentro do painel." O que você quer dizer com isso?
Blaszard

Respostas:

36

Coloque esse bloco de código no seu ~/.tmux.conf. Isso permitirá a integração do mouse, permitindo que você copie de um painel com o mouse sem precisar aumentar o 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"

Depois disso, reinicie sua sessão do tmux. Destaque algum texto com o mouse, mas não o solte. Agora, enquanto o texto ainda estiver destacado e pressionado o mouse, pressione a tecla Enter. O texto destacado desaparecerá e será copiado para a área de transferência. Agora solte o mouse.

Além disso, também existem algumas coisas legais que você pode fazer com o mouse, como rolar para cima e para baixo, selecionar o painel ativo etc.

Se você estiver usando uma versão mais recente do tmux no macOS, tente o seguinte em vez do descrito acima:

# 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"

Se estiver usando o iTerm no macOS, vá para iTerm2> Preferências> guia "Geral" e, na seção "Seleção", marque "Os aplicativos no terminal podem acessar a área de transferência".

E se você estiver usando Linux e uma versão mais recente do tmux, então

# 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"

(Você também pode conferir https://github.com/gpakosz/.tmux para muitas outras opções do tmux.)

GMaster
fonte
1
Finalmente, algo que realmente funciona! Copiar e colar é a coisa mais chata de tentar o tmux, eu desisti disso antes e os trechos de configuração que eu estava testando estavam se comportando de maneira inconsistente, muito obrigado.
Breno Salgado
1
Eu estava usando o iterm no mac e tive que ativar a guia iTerm2> Preferências> "Geral" e, na seção "Seleção", "Os aplicativos no terminal podem acessar a área de transferência". Referência: rushiagr.com/blog/2016/06/16/…
Rujoota Shah 19/04
@RujootaShah Sim, está correto. Você precisa fazer isso. Obrigado por compartilhar.
GMaster 20/04
1
Obrigado! Funciona como um encanto. Eu precisava instalar sudo apt-get install -y xclip(Ubuntu Linux) embora.
Petr
funciona perfeitamente, obrigado @GMaster
Luja Shrestha