Recuperando o antigo comportamento de copiar e colar no tmux, com o mouse


111

Isso é o que eu costumava fazer no tmux para copiar e colar (usando o mouse, o teclado funciona de forma diferente e não é disso que estou interessado):

  1. Selecione o texto com o mouse, botão esquerdo pressionado
  2. Colar texto com o botão do meio

Eu atualizei meu sistema operacional, e ele ganhou uma nova versão do tmux. Eu não mudei meu.tmux.conf arquivo de configuração.

Isso é o que tenho que fazer com a versão atual do tmux, 1.6(que vem pré-empacotada no último crunchbang linux):

  1. Selecione o texto com o mouse, botão esquerdo pressionado e shift tecla
  2. Colar texto com o botão do meio
  3. O terminal fica bloqueado, uma pequena área de informações mostra alguns números no canto superior direito do painel atual (ou seja [0/24], provavelmente algo relacionado a quantos caracteres foram colados), que significam pouco para mim e eu não preciso / quero (editar: parececopy-mode é inserido automaticamente aqui)
  4. Tenho que pressionar a qtecla para obter um terminal funcional novamente.

Isso é muito incômodo para algo que faço dezenas de vezes por dia. Como fazer o mecanismo antigo funcionar novamente?


2
no meu terminal st, Shift+ MouseMiddlecola o Xselection como comportamento tradicional. FWIW, MouseMiddlesem um modificador não faz nada.
nabin-info

Respostas:


84

Para restaurar a configuração padrão de copiar / colar você precisa (pelo menos temporariamente) desligar o suporte a mouse no tmux:

prefix : set -g mouse off

Onde prefixestá a chave de acesso tmux ( Ctrl+ Bpor padrão, a menos que você a mapeie novamente). :inicia o modo de comando eset -g define o parâmetro globalmente.

Quando o modo mouse está desativado, as funções padrão de copiar / colar fornecidas pelo sistema operacional funcionam conforme o esperado.

Outra coisa que você pode querer fazer é 'maximizar' o painel atual, para que possa copiar várias linhas facilmente.


Se você estiver trabalhando com uma versão antiga (pré-2.1) do tmux, você precisará usar o seguinte:

prefix : set -g mode-mouse off

Existem mais detalhes e algumas combinações de teclas úteis para automatizar tudo isso aqui:

http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

O ponto principal do artigo relacionado acima é este trecho de .tmux.conf:

# disable mouse control by default - change 'off' to 'on' to enable by default.
setw -g mode-mouse off
set-option -g mouse-resize-pane off
set-option -g mouse-select-pane off
set-option -g mouse-select-window off
# toggle mouse mode to allow mouse copy/paste
# set mouse on with prefix m
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'
# set mouse off with prefix M
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'
# zoom this pane to full screen
bind + \
    new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
    swap-pane -s tmux-zoom.0 \;\
    select-window -t tmux-zoom
# restore this pane
bind - \
    last-window \;\
    swap-pane -s tmux-zoom.0 \;\
    kill-window -t tmux-zoom

13
Se você tiver o tmux 1.8 ou mais recente, existe um comando embutido, Control-B z, que alternará o status ampliado do painel atual. Então CB z para ampliar este painel para tela cheia, o mesmo comando novamente para restaurar. Isso elimina a necessidade de definir as sequências de teclas CB + e CB - no final da configuração acima.
dr-jan

9
Se você tem o tmux 2.1 ou mais recente, todos os comandos relacionados ao mouse se tornaram obsoletos, substituídos por 'mouse' que configura tudo. Portanto, para desativar o modo do mouse por padrão, use 'setw -g mouse off'. Remova quaisquer referências a 'mouse-modo', 'painel de redimensionamento do mouse', 'painel de seleção do mouse' ou 'janela de seleção do mouse'.
dr-jan

50
No entanto, o modo mouse ativado tem seus benefícios: ele me permite rolar. Existe uma combinação de configurações que me permite usar meu terminal como um terminal normal? Copiar / colar e rolar incluídos?
Mihai Danila

1
Existe alguma outra configuração que eu possa ter alterado, porque em OSx (Sierra), optionnão ajuda. Girar mode-mouse offpermite que eu selecione normalmente, mas não consigo copiar para a área de transferência ( cmd+Cou cmd+shift+Cnão fazer nada, ou tocar uma campainha de erro ou abrir o seletor de cores)
dwanderson

3
Testado com tmux v3, uma ligação para ligar e desligar:bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny

248
  1. Copie o texto: selecione o texto e pressione o mouse left-buttoncom a shifttecla também.
  2. Cole o texto com a shifttecla +middle-button

30
Para os usuários do OSX, é a chave de opção, conforme descrito nesta postagem do blog: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse
pangratz

3
Na verdade, após selecionar o texto com Shift + LMB, você pode usar a funcionalidade do sistema operacional (Ctrl-Shift-C no meu caso) para copiar para a área de transferência não-X11.
Eugene Pankov

8
O OP afirma claramente que eles querem poder copiar e colar com o mouse, sem usar o teclado. Pressionar Shift(ou tecla de opção no OSX) é o truque mais antigo do livro e funciona na maioria dos emuladores, mas não responde à pergunta original.
Lqueryvg

1
@pangratz Usar a chave de opção pode funcionar para usuários do iTerm, mas não para usuários do Terminal nativo.
anishpatel

Obrigado por esta solução alternativa! Porém, ainda está abaixo do ideal - roda do mouse = rolar o histórico e todas as outras funções do mouse = normal seria muito melhor.
Torsten Bronger

36

Se "set -g mode-mouse on" você pode fazer este truque:

No Mac, pressione o botão "fn", selecione o texto e copie com um clique com o botão direito do mouse ou cmd + c do teclado.


4
para mim, isso parece funcionar apenas se eu não rolar com o mouse. depois de rolar com o mouse, isso não funciona mais
Paulo

Além disso, você pode colar com fn+Middle-Click
spinup

10

Modificado a partir daqui - utilizo em xclipvez do xseloriginal:

bind -T root MouseDown2Pane run -b "xclip -o | tmux load-buffer - && tmux paste-buffer -s ' '"

Isso está funcionando muito bem para mim em tmux 2.5-rc2


funciona bem no terminal, mas fica estranho quando tento colar no vim
Tropilio

9

Use <prefix>+mo modo de mouse para ativar ou desativar

bind m run "if [[ `tmux show-option -w | grep mode-mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mode-mouse \$toggle &> /dev/null; for cmd in mouse-select-pane mouse-resize-pane mouse-select-window; do tmux set-option -g \$cmd \$toggle &> /dev/null; done;"

Isso funcionou perfeitamente para mim. Muito obrigado. Queria poder rolar no modo mouse, mas isso estava prejudicando minha capacidade de copiar texto. Isso permite uma troca rápida se você deseja desativar o modo do mouse.
Bijan,

6
Eu usobind m set-option mouse\; display-message "Mouse is now #{?mouse,on,off}"
Maxim Suslov

o usuário deseja poder copiar e colar, não mais customização de .tmux.conf!
Jack Wasey

6

Tive problemas para fazer o exemplo de Christian funcionar para o Tmux 2, acho que alguns erros de digitação. Eu fiz o seguinte funcionar e é um pouco mais fácil de ler e define o modo global e janela. hth alguém. novo usuário e tmux é ótimo!

bind m run "\
    tmux show-options -g | grep -q "mouse\\s*on"; \
    if [ \$? = 0 ]; \
    then  \
        toggle=off;  \
    else  \
        toggle=on;  \
    fi;  \
    tmux display-message \"mouse is now: \$toggle\";  \
    tmux set-option -w mouse \$toggle; \
    tmux set-option -g mouse \$toggle; \
    "

1
Funciona para mim. Testado no tmux HEAD do github (até ontem).
Lqueryvg

2
Para fazer isso funcionar, eu tive que mudar a show-optionslinha para tmux show-options -g | grep -q "mouse\\s*on"; \ . Isso ocorre porque o regex mouse.*oncorresponde ao @scroll-in-moused-over-pane "on"que faz parte do plugin nhdaly / tmux-better-mouse-mode
Mandy Schoep

1
Encadernação mais simples que faz basicamente a mesma coisa -bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny

6

Para usuários de Mac + iTerm2 + tmux (versão> 2.1) :

Certifique-se de que o modo do mouse está definido na configuração do tmux (basta adicionar set -g mode-mouse on~ / .tmux.conf). Agora, para copiar o texto dentro de um painel:

  1. pressione option + command e selecione o texto que deseja copiar usando o cursor do mouse. É como cortar uma foto.
  2. O texto selecionado seria copiado automaticamente (sem necessidade command + c). Basta colar pelos meios usuais.

5

Yves Blusseau me ajudou a descobrir como funciona, mas na minha máquina (executando o Windows 10 ) o comportamento era um pouco diferente.

tmux 2.6

Com o mouse ativado (:set -g mouse on )

cópia de

  1. Calma Shift e selecione com o mouse o texto que deseja copiar
  2. Agora clique com o botão direito para copiar o texto selecionado (sem segurar Shift)

Colar

  1. Mantenha pressionado Shifte clique com o botão direito para inserir o texto copiado

Simples assim. Aproveitar!


Ao melhor. Simples e elegante.
débil

3

Esta é uma versão modificada da resposta de Kaixuan que é compatível com Tmux 2.1.

`bind m run "if [[ `tmux show-options -w | grep mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mouse \$toggle &> /dev/null;`"

Todas as mode-mouseopções foram combinadas em uma mouseopção e show-optiontiveram que ser substituídas porshow-options


1
isso é suposto estar no tmux.conf? ??
Arnold Roa

1
onde isso está indo?
statquant

@ArnoldRoa @statquant: Sim, vai para o ~/.tmux.confarquivo. É a <prefix>+mchave para executar esse script embutido.
inblueswithu

0

em ~/.tmux.conf:

set -g mouse off

ter também bind r source-file ~/.tmux.confpode ser útil para que você possa ctrl-d rrecarregar a configuração, por exemplo.


0

Com base nas outras respostas postadas aqui, criei uma solução concisa que funciona com (pelo menos) tmux 2.8 e tmux 3.1 .

Você pode ligar tmux mouse supporte desligar pressionando prefix- M. No .tmux.confarquivo, inclua esta linha:

bind-key -T prefix m run "m=$(tmux show -g mou|grep -q on;echo $?);tmux set -g mou $m;tmux display mouse:\$m"

Isso será exibido mouse: 1quando ativado e mouse: 0quando desativado. Pressionar repetidamente prefix- Malternará o modo do mouse entre ligado e desligado .

Veja também: suporte a mouse tmux

EDITAR: Se você returned 1vir uma mensagem de erro de comando , será necessário usar o seguinte para o tmux 3.1 ou tmux 3.2 :

bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'

(esta solução foi mencionada anteriormente)


-1

Eu uso a seguinte ligação para selecionar o texto com o botão esquerdo do mouse pressionado -

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.