Récupérer l'ancien comportement du copier-coller dans tmux, avec la souris

111

C'est ce que je faisais dans tmux pour copier-coller (en utilisant la souris, le clavier fonctionne différemment et ce n'est pas ce qui m'intéresse):

  1. Sélectionnez le texte avec la souris, bouton gauche enfoncé
  2. Coller le texte avec le bouton du milieu

J'ai mis à jour mon système d'exploitation, et cela a obtenu une nouvelle version de tmux. Je n'ai pas changé mon .tmux.conffichier de configuration.

Voici ce que j'ai à faire avec la version actuelle de tmux, 1.6(qui est pré-emballée dans le dernier linux crunchbang):

  1. Sélectionnez le texte avec la souris, le bouton gauche enfoncé et la shift touche
  2. Coller le texte avec le bouton du milieu
  3. Le terminal est bloqué, une petite zone d'informations affiche quelques chiffres en haut à droite du volet actuel (c'est-à [0/24]- dire probablement quelque chose lié au nombre de caractères collés), ce qui signifie peu pour moi et je n'ai pas besoin / veux (modifier: il semble copy-modeest entré automatiquement ici)
  4. Je dois appuyer sur la qtouche pour obtenir à nouveau un terminal fonctionnel.

C'est trop compliqué pour quelque chose que je fais des dizaines de fois par jour. Comment faire fonctionner à nouveau l'ancien mécanisme?

blueFast
la source
2
dans mon terminal st, Shift+ MouseMiddlecolle la sélection X comme un comportement traditionnel. FWIW, MouseMiddlesans modificateur ne fait rien.
nabin-info

Réponses:

84

Pour restaurer la configuration de copier / coller par défaut, vous devez (au moins temporairement) désactiver la prise en charge de la souris dans tmux:

prefix : set -g mouse off

prefixest la clé d'accès tmux ( Ctrl+ Bpar défaut sauf si vous la remappez ). :démarre le mode commande et set -gdéfinit le paramètre globalement.

Lorsque le mode souris est désactivé, les fonctions standard de copier / coller fournies par votre système d'exploitation fonctionnent comme prévu.

Une autre chose que vous voudrez peut-être faire est de «maximiser» le volet actuel, afin de pouvoir copier facilement plusieurs lignes.


Si vous travaillez avec une ancienne version (pré-2.1) de tmux, vous devez à la place utiliser ce qui suit:

prefix : set -g mode-mouse off

Il y a plus de détails et quelques raccourcis clavier pratiques pour automatiser tout cela ici:

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

L'idée maîtresse de l'article lié à ci-dessus est cet extrait 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
dr-jan
la source
13
Si vous avez tmux 1.8 ou plus récent, il existe une commande intégrée, Control-B z, qui basculera le statut zoomé du volet actuel. Donc CB z pour zoomer ce volet en plein écran, la même commande à nouveau pour restaurer. Cela supprime la nécessité de définir les séquences de touches CB + et CB - à la fin de la configuration ci-dessus.
dr-jan
9
Si vous avez tmux 2.1 ou plus récent, toutes les commandes liées à la souris ont été rendues obsolètes, remplacées par 'mouse' qui définit tout. Donc, pour désactiver le mode souris par défaut, utilisez «setw -g mouse off». Supprimez toutes les références à 'mode-mouse', 'mouse-resize-pane', 'mouse-select-pane' ou 'mouse-select-window'.
dr-jan
50
Cependant, le mode souris activé a ses avantages: il me permet de faire défiler. Existe-t-il une combinaison de paramètres qui me permet d'utiliser mon terminal comme un terminal normal? Copier / coller et faire défiler inclus?
Mihai Danila
1
Y a-t-il un autre paramètre avec lequel j'ai peut-être dérangé, car allumé OSx (Sierra), optionn'aide pas. Tourner mode-mouse offme permet de sélectionner comme d'habitude, mais je ne peux pas copier dans le presse-papiers ( cmd+Cou cmd+shift+Cne rien faire, ni sonner une cloche d'erreur, ni afficher le sélecteur de couleur)
dwanderson
3
Testé avec tmux v3, une liaison pour l'activer et le désactiver:bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny
248
  1. Copiez le texte: sélectionnez le texte et appuyez également sur la souris left-buttonen shiftappuyant sur la touche.
  2. Coller le texte avec la shifttouche +middle-button
Yves Blusseau
la source
30
Pour les utilisateurs d'OSX, c'est la clé d'option, comme décrit dans ce billet de blog: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse
pangratz
3
En fait, après avoir sélectionné du texte avec Shift + LMB, vous pouvez utiliser la fonctionnalité du système d'exploitation (Ctrl-Shift-C dans mon cas) pour copier dans le presse-papiers non-X11.
Eugene Pankov
8
L'OP indique clairement qu'ils veulent pouvoir copier et coller avec la souris, sans utiliser le clavier. Appuyer sur Shift(ou sur la touche d'option sur OSX) est la plus ancienne astuce du livre et fonctionne sur la plupart des émulateurs, mais ne répond pas à la question d'origine.
Lqueryvg
1
@pangratz L'utilisation de la touche option peut fonctionner pour les utilisateurs iTerm, mais pas pour les utilisateurs du terminal natif.
anishpatel
Merci pour cette solution de contournement! C'est encore sous-optimal - molette de la souris = faire défiler l'historique, et toutes les autres fonctions de la souris = normal seraient bien meilleures.
Torsten Bronger
36

Si "set -g mode-mouse on", vous pouvez faire cette astuce:

Sur Mac, appuyez sur le bouton "fn", puis sélectionnez le texte et copiez avec le clic droit de la souris ou le clavier cmd + c.

fluder
la source
4
pour moi, cela ne semble fonctionner que si je ne fais pas défiler avec la souris. une fois que je fais défiler avec la souris, cela ne fonctionne plus
Paul
Vous pouvez également coller avec fn+Middle-Click
spinup
10

Modifié à partir d' ici - j'utilise xclipau lieu de xseldans l'original:

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

Cela fonctionne joyeusement pour moi dans tmux 2.5-rc2

Andy
la source
cela fonctionne bien dans le terminal, mais il se comporte bizarrement quand j'essaye de coller dans vim
Tropilio
9

Utilisez <prefix>+mbascule le mode souris ou désactiver

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;"
Kaixuan Wang
la source
Cela a fonctionné parfaitement pour moi. Merci beaucoup. Je voulais pouvoir faire défiler en mode souris, mais cela réduisait ma capacité à copier du texte. Cela permet une commutation rapide si vous souhaitez désactiver le mode souris.
Bijan le
6
J'utilisebind m set-option mouse\; display-message "Mouse is now #{?mouse,on,off}"
Maxim Suslov
l'utilisateur veut pouvoir copier et coller, pas encore plus de personnalisation .tmux.conf!
Jack Wasey
6

J'ai eu du mal à faire fonctionner l'exemple de Christian pour Tmux 2, je pense que certaines fautes de frappe. J'ai fait fonctionner ce qui suit et il est un peu plus facile à lire et définit à la fois le mode global et le mode fenêtre. hth quelqu'un. nouvel utilisateur et tmux est génial!

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; \
    "
Neil McGill
la source
1
Travaille pour moi. Testé contre tmux HEAD de github (à partir d'hier).
Lqueryvg
2
Pour faire ce travail, j'ai dû changer la show-optionsligne en tmux show-options -g | grep -q "mouse\\s*on"; \ . C'est parce que l'expression régulière mouse.*oncorrespond à celle @scroll-in-moused-over-pane "on"qui fait partie du plugin nhdaly / tmux-better-mouse-mode
Mandy Schoep
1
Reliure plus simple qui fait essentiellement la même chose -bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny
6

Pour les utilisateurs de Mac + iTerm2 + tmux (version> 2.1) :

Assurez-vous que le mode souris est défini dans tmux config (ajoutez simplement set -g mode-mouse on~ / .tmux.conf). Maintenant, pour copier le texte dans un volet:

  1. presse option + command et sélectionnez le texte que vous souhaitez copier à l'aide du curseur de la souris. C'est comme recadrer une photo.
  2. Le texte sélectionné aurait copié automatiquement (pas besoin de command + c). Collez-le simplement par les moyens habituels.
Umashankar
la source
5

Yves Blusseau m'a aidé à comprendre comment cela fonctionne mais sur ma machine (exécutant Windows 10 ) le comportement était un peu différent.

tmux 2.6

Avec souris activée ( :set -g mouse on)

Copie

  1. Maintenez enfoncé Shiftet sélectionnez avec votre souris le texte que vous souhaitez copier
  2. Maintenant, faites un clic droit pour copier le texte sélectionné (sans maintenir Shift)

Pâte

  1. Maintenez enfoncé Shiftet faites un clic droit pour insérer le texte copié

Aussi simple que cela. Prendre plaisir!

winklerrr
la source
Le meilleur. Simple et élégant.
faible le
3

Il s'agit d'une version modifiée de la réponse de Kaixuan compatible avec 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;`"

Toutes les mode-mouseoptions ont été combinées en une seule mouseoption et show-optionont dû être remplacées parshow-options

Christian Schlensker
la source
1
cela est supposé être sur le tmux.conf? ??
Arnold Roa
1
où cela va-t-il?
statquant
@ArnoldRoa @statquant: Oui, cela va dans le ~/.tmux.conffichier. Il lie la <prefix>+mclé pour exécuter ce script en ligne.
inblueswithu
0

dans ~/.tmux.conf:

set -g mouse off

avoir bind r source-file ~/.tmux.confpeut être utile aussi pour que vous puissiez ctrl-d rrecharger la configuration par exemple.

localhostdotdev
la source
0

Sur la base des autres réponses publiées ici, j'ai créé une solution concise qui fonctionne avec (au moins) tmux 2.8 et tmux 3.1 .

Vous pouvez activer tmux mouse supportet désactiver en appuyant sur prefix- M. dans le.tmux.conf fichier, incluez cette ligne:

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

Cela s'affichera mouse: 1lorsqu'il est activé et mouse: 0lorsqu'il est désactivé. Des pressions répétées sur prefix- Mbasculera le mode de la souris entre le et hors .

Voir également: support de la souris tmux

EDIT: Si vous voyez un returned 1message d'erreur de commande , vous devrez utiliser ce qui suit à la place pour tmux 3.1 ou tmux 3.2 :

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

(cette solution a été mentionnée précédemment)

jftuga
la source
-1

J'utilise la liaison suivante pour sélectionner du texte avec le bouton gauche de la souris enfoncé -

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
webh
la source