Jak przewijać w tmux?

1292

Właśnie zacząłem używać tmux i bardzo mi się podoba, ale muszę mieć możliwość przewijania w buforach / oknach / oknach, które mam otwarte. Nie obchodzi mnie, czy to działa z myszą, czy nie. Kiedy przeszukuję stronę podręcznika tmux, widzę tylko dwa wystąpienia słowa „przewiń”, które się nawet pokazują, i oba mają związek z trybem kopiowania. Czy istnieje sposób na przewijanie bez całego nakładu związanego z wejściem w tryb kopiowania?

czadoh
źródło
8
Jakie są koszty ogólne? copy-modeto sposób przeglądania historii (i opcjonalnie kopiowania z niej rzeczy).
Chris Johnsen,
2
dla mnie możesz nacisnąć f7, aby przejść do trybu przewijania i q, aby wyjść
JohnMerlino,
7
set -g mode-mouse onOdpowiedź per @ chaiyachaiya była dla mnie zwycięzcą
Peter Berg

Odpowiedzi:

1567

Ctrl- bwtedy [możesz używać normalnych klawiszy nawigacyjnych do przewijania (np. Up Arrowlub PgDn). Naciśnij, qaby wyjść z trybu przewijania.

Możesz też nacisnąć przycisk Ctrl-, b PgUpaby przejść bezpośrednio do trybu kopiowania i przewinąć o jedną stronę w górę (tak to wygląda na większość czasu)

W vitrybie (patrz poniżej) możesz także przewijać stronę w górę / w dół linia po linii za pomocą Shift- ki Shift- j(jeśli jesteś już w trybie przewijania). Nie przesunięty kursor przesuwa się zamiast strony.

Fragmenty strony man :

tmux może być kontrolowany z podłączonego klienta za pomocą domyślnej kombinacji klucza prefiksu, „C-b” (Ctrl-b), a następnie klawisza polecenia.

 The default command key bindings are:

[           Enter copy mode to copy text or view the history.

Function                     vi              emacs
--------                     --              -----
Half page down               C-d             M-Down
Half page up                 C-u             M-Up
Next page                    C-f             Page down
Previous page                C-b             Page up
Scroll down                  C-Down or C-e   C-Down
Scroll up                    C-Up or C-y     C-Up
Search again                 n               n
Search again in reverse      N               N
Search backward              ?               C-r
Search forward               /               C-s

Plus kilka innych. Pamiętaj, że musisz nacisnąć C-bdwa razy, jeśli używasz go do przewijania strony w górę, ponieważ C-bjest on związany jako klawisz polecenia. Zobacz stronę podręcznika, aby uzyskać informacje na temat zastępowania polecenia trybu kopiowania powtórzeniem.

Możesz ustawić tryb przypisywania klawiszy za pomocą Ctrl- b, a następnie

:set-window-option mode-keys emacs

lub vi.

Dennis Williamson
źródło
14
Myślę, że C-b =jest choose-bufferdomyślnie. Miałeś na myśli C-b [(który jest copy-modedomyślnie)? Możesz także użyć C-b PageUpdo uruchomienia trybu kopiowania bezpośrednio na poprzedniej stronie (bardzo przydatne, gdy wiesz, że to, co chcesz wyświetlić / skopiować, przewinęło już bieżącą stronę).
Chris Johnsen,
4
Prawidłowo, mój tmux nie ma trybu przewijania. Musisz przejść C-b [do trybu kopiowania, a następnie przewijać klawisze emacs lub vi. Wydaje się, że to tylko kilka kroków do przewinięcia, ale zalety tmux wciąż przewyższają te irytacje. Jestem na komputerze Macbook i nie ma klucza PageUp: - \. (Poza tym, jak zrobić klucze ze zniżką, tak jak ty, Dennis?)
Chadoh
44
@chadoh: Wypróbuj je na komputerze Macbook: Home: fn-LeftArrow; Koniec: fn-RightArrow; Page Up: fn-UpArrow; Strona w dół: fn-DownArrow. Aby wykonać klawisze:<kbd>Ctrl</kbd>
Dennis Williamson,
5
na Macbooku fn + up przechodzi bezpośrednio do aplikacji terminalowej i nigdy nie uderza w Tmux
Tyler
15
Na MacBooku, jeśli jesteś w trybie przewijania, możesz użyć klawiszy Fn + Shift + Strzałka w lewo, aby przewinąć stronę w górę.
Nick Hammond
306

Cóż, powinieneś rozważyć właściwy sposób ustawiania przewijania: dodaj swój tmux.conf

set -g mouse on        #For tmux version 2.1 and up

lub

set -g mode-mouse on   #For tmux versions < 2.1

Działa dla mnie w oknach i oknach. Teraz tmux jest po prostu idealny.

Praktyczny tmux ma więcej informacji na temat plików tmux.conf.

chaiyachaiya
źródło
5
Kiedy to robię, kliknięcia i przewijanie myszą powodują, że bełkotliwe znaki są drukowane w wierszu polecenia terminala, którego używam z tmux. Jakieś pomysły?
ely
22
Przyszli użytkownicy myszy tmux: Aby uniknąć konieczności ponownego przewijania w dół przed pisaniem, możesz nacisnąć przycisk, qaby wyjść z trybu przewijania.
Jezen Thomas
15
Przewijanie myszką działa dobrze, ale niestety nie mogę już używać myszy do zaznaczania tekstu. Korzystanie z Tilda i tmux.
friederbluemle
27
Zauważ, że w wersji tmux 2.1 i nowszych jest to zastąpione set -g mouse on, a przewijanie nie wchodzi automatycznie w tryb kopiowania, jak to miało miejsce wcześniej.
trzynio
25
Ważna uwaga: To ustawienie przerywa podświetlanie i kopiowanie tekstu. Użyj Shift + kliknij, aby zachować tę funkcjonalność.
Shadoninja
141

Z mojego .tmux.conf:

# Sane scrolling
set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Umożliwia to natywne przewijanie Xterm.

togdon
źródło
28
Czy możesz wyjaśnić, co to dokładnie robi?
Ivo
11
Nie wiem, co to robi, ale jest to genialny geniusz. Wreszcie, przewijanie tmux działa, tak!
siebie
5
To nie działa dla mnie na OS X ...
Nick
17
Rozwiązanie: gist.github.com/1297707
Nick
6
Sprawdź to, jeśli masz wątpliwości co do odpowiedzi togdona: superuser.com/questions/310251/… IMO, jeśli masz tylko jeden panel, to rozwiązanie działa lepiej niż zaakceptowana odpowiedź.
thameera 16.04.13
57

W przypadku najnowszego tmux 2.1, aby przewijać myszą zdrowo, jest to właściwa odpowiedź:

set -g mouse on
" sane scrolling:
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'"

nie wystarczy po prostu ponownie załadować .tmux.conf, musisz ponownie uruchomić tmux, np tmux kill-server && tmux

zaczerpnięte z https://github.com/tmux/tmux/issues/145

Flov
źródło
1
Jak to nie jest akceptowana odpowiedź?
Marcel
2
pomogła uwaga w tej odpowiedzi na temat „nie wystarczy, by po prostu ponownie załadować .tmux.conf” i wyjście dla mnie ze wszystkich sesji tmux (może zadziałałby kill-server)!
Colin D
1
czy mógłbyś wyjaśnić, jak to działa?
oligofren,
Wygląda na to, że przesyła zdarzenia myszy po kliknięciu / przewinięciu myszy itp. jeśli panel jest w jakimkolwiek stanie pośrednim / buforowanym (tylko tryb kopiowania?), a mysz naciska przycisk, przewija itp. Ostatnia część obejmuje przewijanie w trybie bezpośrednim poprzez przełączenie najpierw na tryb pośredni. Jeśli nie dla tych elementów sterujących, terminal może interpretować zdarzenia jako przewijanie historii, jeśli w ogóle. Powiedziawszy to, nie wiem, czy kiedykolwiek udało mi się sprawić, aby mój pager i Vim przewijały się jednocześnie, i próbowałem obejść kilka fragmentów.
John P
2
@chefarov - w komentarzu do innej odpowiedzi możesz to zrobić, Shift+clickgdy masz włączony tryb myszy.
Brendan Moore
14

W moim przypadku po prostu opt+ UpArrowi opt+ DownArroww OSX.

ythdelmar
źródło
@ fixer1234 Pytanie w ogóle nie wspomina o Linuksie. tmuxmoże być również używany w systemie OS X.
slhck
@slhck: Dzięki. Zbyt niewyraźne oczy; rozpoczął się astygmatyzm. Źle odczytałem tag tmux jako tag linux.
fixer1234 17.04.15
11

W ten sposób sprawiłem, że działało, i powody, dla których uważam, że jest lepszy niż domyślny.

Aby to wypróbować, wstaw wszystkie sekcje kodu ~/.tmux.conf.

Krok 1. Zmień klucz prefiksu, abyś nie musiał sięgać ani jednego bitu. „B” jest pozornie bliskim klawiszem, ale znajduje się pośrodku dwóch palców wskazujących (odpowiednio w „F” i „J”). Ponieważ ten skrót jest niezbędny w tmux, Cj jest znacznie lepszy, ponieważ wymaga zerowego ruchu ręki (oprócz naciśnięcia klawisza).

set -g prefix C-j
unbind C-b
bind C-j send-prefix

Krok 2. „S” (aby wejść w tryb kopiowania) to: 1) zamknij (z tego samego powodu co powyżej), 2) dotyczy drugiej ręki (porównaj: 1-2 w boksie lub lspolecenie przeglądania plików w katalogu ) i 3) można uznać za mnemoniczny dla „przewijania” (chociaż tryb kopiowania nie polega tylko na przewijaniu).

bind s copy-mode

Krok 3. Ostatnia część, rzeczywiste przewijanie. „P” i „N” są znane w tym celu użytkownikom Emacsa. Są bliskie, intuicyjne („P” jest powyżej „N” na klawiaturze) i mnemoniczne („poprzednie” i „następne”). Jeśli po prostu wykonałeś przewijanie w Emacsie, a następnie przejdziesz do tmux, sensowne jest posiadanie tych skrótów.

Odkryłem jednak, że „I” i „K” są jeszcze lepsze - są nawet bliższe niż „P” i „N” oraz intuicyjne (z tego samego powodu); jeśli chodzi o mnemoniki - ponieważ przewijanie jest tak powszechną rzeczą, mnemoniki tak naprawdę nie mają znaczenia, ponieważ skróty wkrótce ominą twój mózg i wejdą w pamięć mięśni.

bind -t emacs-copy 'p' scroll-up
bind -t emacs-copy 'n' scroll-down
bind -t emacs-copy 'i' scroll-up
bind -t emacs-copy 'k' scroll-down
Emanuel Berg
źródło
7

Dużo szukałem tego i najlepsze rozwiązanie dla mnie działa, jak wspomniano w tym szczegółowym przewodniku: http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

Dodaj te wiązania w ~ / .tmux.conf:

set -g mode-mouse on

unbind +
bind + \
  new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
  swap-pane -s tmux-zoom.0 \;\
  select-window -t tmux-zoom

unbind -
bind - \
  last-window \;\
  swap-pane -s tmux-zoom.0 \;\
  kill-window -t tmux-zoom

Po wdrożeniu powyższego podejścia możesz również kopiować z paneli w oknie, najpierw powiększając każdy panel za pomocą Prefiksu + .

Jednym ważnym szczegółem, którego brakowało w trybie myszy, jest naciśnięcie Shift przed wybraniem obszaru do skopiowania. Spowoduje to skopiowanie go do tradycyjnego bufora terminala zamiast bufora kopiowania tmux. ( https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues )

muneeb
źródło
7

Polecam wypróbowanie wtyczki trybu tmux-better-mouse, aby rozwiązać większość problemów związanych z myszą tmux.

Jest kompatybilny z Tmux 2.1+ i nowym set-option -g mouse onpodejściem.

aymericbeaumet
źródło
1
Dzięki, to dla mnie najlepsze rozwiązanie. Obejmuje wszystkie moje wiązania kółka myszy, które dodałem ręcznie (więc już ich nie potrzebuję), i są dwie cechy zabójcy, których bardzo chciałem: scroll-without-changing-panew połączeniu z scroll-without-changing-panei emulate-scroll-for-no-mouse-alternate-buffer. Teraz moje korzystanie z Tmux jest znacznie lepsze.
selurvedu
6

Jedyną rzeczą, która działa dla mnie, jest umieszczenie następujących ~/.tmux.conf

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

(może być konieczne ponowne uruchomienie komputera, aby to zadziałało)

Aktualizacja:

Odkryłem, że jeśli zmienisz ustawienie w Putty Connection> Data> Terminal-type na „putty” (służy do naprawy niektórych problemów z formatowaniem) z „xterm”, to rozwiązanie przestanie działać.

Aktualizacja 2:

Użyj tego, jeśli chcesz „kit” jako typ terminala: set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

stada
źródło
2
Ten rozwiązuje również mój problem z przewijaniem w aplikacji na iPhone'a.
NathaneilCapital
Ostatnio próbowałem tego nie działało, ale to działało. Dziwne. set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
udaje się
4

To działało dla mnie:

vim ~/.tmux.conf
set -g mode-mouse on      ###Insert this setting with vim, then source the file.
tmux source-file ~/.tmux.conf
Chhetri
źródło
2
Od wersji 2.1 (18 października 2015 r.) set -g mouse on
+1 za podanie pełnej ścieżki pliku konfiguracyjnego. W przeciwnym razie odpowiedź @ chaiyachaiya byłaby idealna.
John McFarlane
1

FWIW, na Macbooku / OSX Mojave, po ctrl+[:

  • up arrow dla składu
  • down arrow dla linii w dół
  • fn + up arrow na stronę w górę
  • fn + down arrow na stronę w dół
  • q, aby wyjść z trybu przeglądania
mithunpaul
źródło
0

Jedyną rzeczą, która działała dla mnie, był vim ~ / .tmux.conf set -g mode-mouse na ### Wstaw to ustawienie za pomocą vim, a następnie źródłowy plik. Plik źródłowy tmux ~ / .tmux.conf

Sarika Soni
źródło
Czy możesz użyć formatowania, aby to wyjaśnić? Użyj przycisku EDYCJA, a następnie spójrz na opcje dostępne w edytorze, aby dodać pomocne formaty.
music2myear
-2
  • Ctrl+ A- aby rozpocząć przewijanie
  • Ctrl+ C- aby zatrzymać przewijanie
użytkownik656723
źródło
3
Ten post jest zbyt krótki, aby można było na niego skutecznie odpowiedzieć na pytanie. Dodaje bardzo niewiele nowych informacji do już opublikowanych odpowiedzi; nie mówi nic o tym, jak przewijać (tylko jak zmieniać tryb kopiowania i poza nim). Domyślna kombinacja klawiszy prefiksu poleceń to Ctrl-B( Ctrl-Ajest domyślna dla ekranu GNU).
Anthony Geoghegan
1
Nie jestem pewien, czy autor tej odpowiedzi w ogóle zrozumiał pytanie. To jest nieprzydatne i po prostu złe.
Vik
2
Tak długo szukałem sposobu na zatrzymanie przewijania, dziękuję za zwrócenie na to uwagi!
PERR0_HUNTER