tmux - przewiń w górę / w dół za pomocą shift + strona w górę / w dół do okienka

14

Chciałbym móc przewijać w górę / w dół do danego panelu z tym samym skrótem klawiszowym, co xterm, tj. SHIFT + Page Up / Down.

Na przykład, jeśli okno tmux jest podzielone na 2 pionowe panele, mógłbym przewijać jeden z nich za pomocą klawiatury, podczas gdy drugi nie przewija się.

Czy to możliwe ?

Oto mój tmux.conf:

set -g status off
set -g prefix C-o
unbind C-b
bind C-o send-prefix

# settings -------------------------------------------------------------

setw -g utf8 on
setw -g xterm-keys on
set -g default-terminal "screen-256color"

set-option -g set-titles on
set-option -g set-titles-string '[#S:#I #H] #W'

# auto-set window title
setw -g automatic-rename
setw -g aggressive-resize on

# vim keybinds
set-option -g status-keys vi
set-window-option -g mode-keys vi

# scroll inside the current pane
#bind-key k page-up
#bind-key l page-down

# mouse
set -g mode-mouse on
setw -g mouse-select-window on
setw -g mouse-select-pane on

# scrollback buffer n lines
set -g history-limit 100000

# fixes shift-pageup/shift-pagedown
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
set -g visual-activity on

# faster key repetition
set -s escape-time 0

# activity alert
setw -g monitor-activity on
set -g visual-activity on

# alt+directions navigates through panes
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D
użytkownik1610662
źródło

Odpowiedzi:

8

Aby przewinąć w górę, możesz:

bind -n S-Pageup copy-mode -u

Powyższe nie działa na komputerze Mac, więc przetestowałem z:

bind -n S-Up copy-mode -u

O ile mi wiadomo, po naciśnięciu przycisku S-Up możesz nadal używać S-Up lub po prostu przewracać strony w górę. Możesz przewijać stronę w dół. Nie są to dokładnie te powiązania, których szukałeś, więc przepraszam. Mam nadzieję, że powinno to przybliżyć cię do celu.

EDYTOWAĆ:

Właśnie przetestowałem z:

bind -n Pageup copy-mode -u

a to pozwala używać tylko stronicowania i stronicowania.

mjwhitta
źródło
Chociaż bind -n Pageup copy-mode -upozwala mi naciskać PgUp, aby przejść do trybu kopiowania i przewijać w górę, nie mogę jednak używać PgUp do przewijania w górę.
apocryphalauthor
6

Tak, wiem, że to pytanie jest stare, ale nie jest tak daleko w wynikach Google i spędziłem dużo czasu, aby dowiedzieć się, jak to zrobić po prostu dlatego, że prawie żaden wynik google nie zawierał odpowiedzi, tylko pytania.

AFAIK przewija tylko jedno okienko w trybie kopiowania. Aby przejść do trybu kopiowania, możesz użyć, prefix-[a następnie przewinąć za pomocą C-upi C-downlub możesz ustawić własne skróty klawiszowe (w pliku konfiguracyjnym), które w trybie emacsa wyglądają następująco:

bind-key -t emacs-copy -n S-PPage halfpage-up
bind-key -t emacs-copy -n S-NPage halfpage-down

Spowoduje to ustawienie kombinacji klawiszy Shift+ PageUpi Shift+ w PageDowncelu przewinięcia odpowiednio połowy strony w górę w trybie kopiowania . Kiedy używasz trybu vi, musisz zmienić go na coś takiego:

bind-key -t vi-copy -n S-PPage halfpage-up
bind-key -t vi-copy -n S-NPage halfpage-down

Teraz, jeśli chcesz przejść do trybu kopiowania „automatycznie” i nie chcesz go używać, prefix-[możesz dodać następujący wiersz do pliku konfiguracyjnego:

bind-key -t root -n S-PPage copy-mode -u

Spowoduje to otwarcie trybu kopiowania i przewinięcie (pełnej) strony w górę po naciśnięciu Shift+ PageUpw trybie edycji (tryb domyślny). Aby otworzyć tylko tryb kopiowania bez przewijania strony, po prostu pomiń -u. A jeśli chcesz, aby przewijać całą stronę w górę / w dół lub po prostu linia można użyć słów kluczowych page-up, scroll-uplub jeden korzystania z poleceń

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy

aby zobaczyć pełną listę opcji do użycia i domyślnych skrótów klawiszowych.

Max Matti
źródło
1
Nie jestem pewien, czy jest to wersja, tmuxktórą uruchamiam, czy nie, ale -tparametr nie jest rozpoznawany (jednak działa -T). Możliwe literówki?
mdip
Najprawdopodobniej literówka, ale też nie ma to sensu razem -n, ponieważ jest to skrót do-T root
smido
4

Oto rozwiązanie, które powinno działać z pamięcią mięśniową, pozwalając na użycie Shift+ PageUpi Shift+ PageDowntak jak w normalnym terminalu.

bind -n Pageup copy-mode -u
bind -n S-Pageup copy-mode -u
bind -n S-Pagedown send-keys Pagedown

Jeśli używasz Vima, musisz warunkowo włączyć to wiązanie, bo może to popsuć rzeczy podczas używania PageUpitp. W vimie wewnątrz tmux.

is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pagedown send-keys Pagedown

(Dzięki rozwiązaniu @ mjwhitta, które to udoskonala)

Jack Senechal
źródło
+1, ale bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"było wymagane, aby Pageup kontynuował przewijanie w górę po wielu naciśnięciach.
79E09796,