Przywracanie starego zachowania kopiowania wklejania w tmux za pomocą myszy

111

To właśnie robiłem w tmuxie do kopiowania-wklejania (za pomocą myszki klawiatura działa inaczej i nie to mnie interesuje):

  1. Zaznacz tekst myszką, wciśnięty lewy przycisk
  2. Wklej tekst środkowym przyciskiem

Zaktualizowałem system operacyjny i otrzymałem nową wersję tmux. Nie zmieniłem .tmux.confpliku konfiguracyjnego.

To jest to, co mam zrobić z obecną wersją tmux, 1.6(który jest fabrycznie zapakowany w najnowszym linux CrunchBang):

  1. Zaznacz tekst myszą, wciśnij lewy przycisk i shift klawisz
  2. Wklej tekst środkowym przyciskiem
  3. Terminal jest blokowany, mały obszar informacyjny pokazuje kilka liczb w prawym górnym rogu bieżącego panelu (tj. [0/24]Prawdopodobnie coś związanego z liczbą wklejonych znaków), które niewiele dla mnie znaczą i nie potrzebuję / nie chcę (edytuj: to Wydaje się copy-modejest wprowadzane automatycznie tutaj)
  4. Muszę nacisnąć qklawisz, aby ponownie uzyskać funkcjonalny terminal.

To zbyt duży kłopot jak na coś, co robię dziesiątki razy dziennie. Jak przywrócić działanie starego mechanizmu?

blueFast
źródło
2
w moim terminalu st, Shift+ MouseMiddlewklejenie Xselection jak tradycyjne zachowania. FWIW MouseMiddlebez modyfikatora nic nie robi.
nabin-info

Odpowiedzi:

84

Aby przywrócić domyślną konfigurację kopiowania / wklejania, musisz (przynajmniej tymczasowo) wyłączyć obsługę myszy w tmux:

prefix : set -g mouse off

Gdzie prefixjest klucz dostępu tmux ( domyślnie Ctrl+ B, chyba że ponownie go zmapujesz ). :uruchamia tryb poleceń i set -gustawia parametr globalnie.

Gdy tryb myszy jest wyłączony, standardowe funkcje kopiuj / wklej zapewniane przez system operacyjny działają zgodnie z oczekiwaniami.

Inną rzeczą, którą możesz chcieć zrobić, jest „zmaksymalizowanie” bieżącego panelu, aby można było łatwo skopiować wiele wierszy.


Jeśli pracujesz ze starą (starszą niż 2.1) wersją tmux, zamiast tego musisz użyć następującego:

prefix : set -g mode-mouse off

Tutaj jest więcej szczegółów i kilka przydatnych skrótów klawiszowych, które zautomatyzują to wszystko:

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

Głównym tematem artykułu, do którego nawiązano powyżej, jest ten fragment z .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
źródło
13
Jeśli masz tmux 1.8 lub nowszy, istnieje wbudowane polecenie Control-B z, które przełącza powiększony stan bieżącego panelu. Więc CB z, aby powiększyć ten panel do pełnego ekranu, to samo polecenie ponownie, aby przywrócić. Eliminuje to potrzebę definiowania sekwencji klawiszy CB + i CB - na końcu powyższej konfiguracji.
dr-jan
9
Jeśli masz tmux 2.1 lub nowszy, wszystkie polecenia związane z myszą stały się przestarzałe i zastąpione przez `` mysz '', która ustawia wszystko. Tak więc, aby domyślnie wyłączyć tryb myszy, użyj „setw -g mouse off”. Usuń wszelkie odniesienia do „mode-mouse”, „mouse-resize-pane”, „mouse-select-pane” lub „mouse-select-window”.
dr-jan
50
Jednak włączony tryb myszy ma swoje zalety: pozwala mi przewijać. Czy istnieje kombinacja ustawień, które pozwalają mi używać mojego terminala jak zwykłego terminala? Kopiuj / wklej i przewiń w zestawie?
Mihai Danila
1
Czy jest jakieś inne ustawienie, z którym mogłem się bawić, ponieważ włączone OSx (Sierra), optionnie pomaga. Obracanie mode-mouse offpozwala mi wybierać jak zwykle, ale potem nie mogę skopiować do schowka ( cmd+Club cmd+shift+Cnic nie robić, dzwonić dzwonkiem błędu lub
włączać
3
Testowane z tmux v3, jedno wiązanie do włączania i wyłączania:bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny
248
  1. Skopiować tekst: wybierz tekst i naciśnij przycisk myszy left-buttonz shiftnaciśnięciu przycisku zbyt.
  2. Wklej tekst shiftklawiszem +middle-button
Yves Blusseau
źródło
30
Dla użytkowników OSX jest to klucz opcji, jak opisano w tym poście na blogu: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse
pangratz
3
W rzeczywistości po zaznaczeniu tekstu za pomocą Shift + LMB możesz użyć funkcji systemu operacyjnego (w moim przypadku Ctrl-Shift-C), aby skopiować do schowka innego niż X11.
Eugene Pankov
8
OP wyraźnie stwierdza, że ​​chcą mieć możliwość kopiowania i wklejania za pomocą myszy, bez użycia klawiatury. Naciśnięcie Shift(lub klawisz opcji na OSX) jest najstarszą sztuczką w książce i działa na większości emulatorów, ale nie odpowiada na oryginalne pytanie.
Lqueryvg
1
@pangratz Używanie klucza opcji może działać dla użytkowników iTerm, ale nie dla użytkowników natywnego terminala.
anishpatel
Dziękujemy za obejście! Jest to jednak nadal nieoptymalne - kółko myszy = przewijanie historii, a wszystkie inne funkcje myszy = normalne byłyby znacznie lepsze.
Torsten Bronger
36

Jeśli "set -g mode-mouse on" możesz wykonać tę sztuczkę:

Na komputerze Mac naciśnij przycisk „fn”, a następnie zaznacz tekst i skopiuj go prawym przyciskiem myszy lub klawiaturą cmd + c.

fluder
źródło
4
dla mnie wydaje się to działać tylko wtedy, gdy nie przewijam myszą. gdy przewijam myszką, to już nie działa
Paul
Możesz także wkleić za pomocą fn+Middle-Click
spin
10

Zmodyfikowano tutaj - xclipzamiast xseloryginału używam :

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

To działa dla mnie wesoło tmux 2.5-rc2

Andy
źródło
to działa dobrze w terminalu, ale zachowuje się dziwnie, gdy próbuję wkleić w vimie
Tropilio
9

Zastosowanie <prefix>+mprzełączania trybu myszy lub wyłączyć

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
źródło
To działało idealnie dla mnie. Dzięki wielkie. Chciałem mieć możliwość przewijania w trybie myszy, ale to przeszkadzało mi w kopiowaniu tekstu. Pozwala to na szybkie przełączanie, jeśli chcesz wyłączyć tryb myszy.
Bijan
6
Używambind m set-option mouse\; display-message "Mouse is now #{?mouse,on,off}"
Maxim Suslov
użytkownik chce mieć możliwość kopiowania i wklejania, a nie więcej dostosowywania .tmux.conf!
Jack Wasey
6

Miałem problemy ze znalezieniem przykładu Christiana do pracy dla Tmux 2, myślę, że kilka literówek. Mam poniżej do pracy i jest nieco łatwiejszy do odczytania i ustawia zarówno tryb globalny, jak i tryb okna. hth ktoś. nowy użytkownik i tmux jest świetny!

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
źródło
1
Pracuje dla mnie. Testowany na tmux HEAD z github (od wczoraj).
Lqueryvg
2
Aby to zadziałało, musiałem zmienić show-optionslinię na tmux show-options -g | grep -q "mouse\\s*on"; \ . Dzieje się tak, ponieważ mouse.*ondopasowanie wyrażenia regularnego @scroll-in-moused-over-pane "on"jest częścią wtyczki nhdaly / tmux-better-mouse-mode
Mandy Schoep
1
Prostsze wiązanie, które w zasadzie robi to samo -bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Evgeny
6

Dla użytkowników Mac + iTerm2 + tmux (wersja> 2.1) :

Upewnij się, że tryb myszy jest ustawiony w konfiguracji tmux (wystarczy dodać set -g mode-mouse on~ / .tmux.conf). Teraz, aby skopiować tekst w okienku:

  1. Naciśnij option + commandi zaznacz tekst, który chcesz skopiować, używając kursora myszy. To jak kadrowanie zdjęcia.
  2. Wybrany tekst zostałby skopiowany automatycznie (nie ma potrzeby command + c). Po prostu wklej go w zwykły sposób.
Umashankar
źródło
5

Yves Blusseau pomógł mi zrozumieć, jak to działa, ale na moim komputerze (z systemem Windows 10 ) zachowanie było nieco inne.

tmux 2.6

Z aktywowaną myszą ( :set -g mouse on)

Kopiuj

  1. Przytrzymaj Shifti zaznacz myszą tekst, który chcesz skopiować
  2. Teraz kliknij prawym przyciskiem myszy, aby skopiować zaznaczony tekst (bez przytrzymywania Shift)

Pasta

  1. Przytrzymaj Shifti kliknij prawym przyciskiem myszy, aby wstawić skopiowany tekst

Proste. Cieszyć się!

winklerrr
źródło
Najlepsze. Prosty i elegancki.
słaby
3

To jest zmodyfikowana wersja odpowiedzi Kaixuana, która jest kompatybilna z 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;`"

Wszystkie mode-mouseopcje zostały połączone w jedną mouseopcję i show-optionmusiały zostać zastąpioneshow-options

Christian Schlensker
źródło
1
to ma być na tmux.conf? ??
Arnold Roa,
1
gdzie to się dzieje?
statquant
@ArnoldRoa @statquant: Tak, to trafia do ~/.tmux.confpliku. Wiąże <prefix>+mklucz, aby uruchomić ten skrypt wbudowany.
inblueswithu
0

w ~/.tmux.conf:

set -g mouse off

posiadanie też bind r source-file ~/.tmux.confmoże być przydatne, więc możesz ctrl-d rna przykład przeładować konfigurację.

localhostdotdev
źródło
0

Na podstawie innych odpowiedzi zamieszczonych tutaj stworzyłem zwięzłe rozwiązanie, które działa z (co najmniej) tmux 2.8 i tmux 3.1 .

Możesz włączać tmux mouse supporti wyłączać, naciskając prefix- M. W .tmux.confpliku umieść ten wiersz:

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

Wyświetli się mouse: 1po włączeniu i mouse: 0wyłączeniu. Wielokrotne naciskanie prefix- Mprzełącza tryb myszy pomiędzy na i poza .

Zobacz też: obsługa myszy tmux

EDIT: Jeśli pojawi się polecenie returned 1komunikat o błędzie, a następnie trzeba będzie użyć zamiast następujące dla tmux 3.1 lub tmux 3.2 :

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

(o tym rozwiązaniu wspomniano wcześniej)

jftuga
źródło
-1

Używam następującego powiązania, aby zaznaczyć tekst z wciśniętym lewym przyciskiem myszy -

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
webh
źródło