tmux - scrolle mit shift + page up / down nach oben / unten in einen Bereich

14

Ich möchte in der Lage sein, mit der gleichen Tastenkombination, die xterm verwendet, in einem bestimmten Bereich nach oben / unten zu scrollen, dh UMSCHALT + Bild nach oben / unten.

Wenn zum Beispiel das tmux-Fenster in zwei vertikale Fenster geteilt ist, könnte ich mit der Tastatur auf einem der beiden Fenster scrollen, während das andere nicht scrollen kann.

Ist es möglich ?

Hier ist meine 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
user1610662
quelle

Antworten:

8

Um nach oben zu scrollen, können Sie Folgendes tun:

bind -n S-Pageup copy-mode -u

Das obige scheint auf einem Mac nicht zu funktionieren, daher habe ich getestet mit:

bind -n S-Up copy-mode -u

Soweit ich weiß, können Sie nach dem Drücken von S-Up weiterhin S-Up oder nur Bild-auf-Bild verwenden, um weiter nach oben zu scrollen. Mit Bild-ab können Sie nach unten scrollen. Dies sind nicht genau die Schlüsselbunde, nach denen Sie gesucht haben, also entschuldige ich mich. Dies sollte Sie näher an Ihr Ziel bringen, hoffe ich.

BEARBEITEN:

Ich habe gerade getestet mit:

bind -n Pageup copy-mode -u

Auf diese Weise können Sie nur Bild-auf und Bild-ab verwenden.

mjwhitta
quelle
Während bind -n Pageup copy-mode -uich PgUp drücken kann, um in den Kopiermodus zu gelangen und einen Bildlauf nach oben durchzuführen, kann ich PgUp nicht verwenden, um weiter nach oben zu scrollen.
Apocryphalauthor
6

Ja, ich weiß, dass diese Frage alt ist, aber es ist nicht so weit unten in den Google-Ergebnissen und ich habe einfach viel Zeit darauf verwendet, herauszufinden, wie es geht, weil fast kein Google-Ergebnis eine Antwort enthielt, sondern nur Fragen.

AFAIK Im Kopiermodus wird nur ein Bereich gescrollt. Gehen in den Kopiermodus können Sie verwenden , prefix-[und blättern Sie dann mit C-upund C-downoder Sie können Ihre eigene keybindings gesetzt (in der Konfigurationsdatei) , die in Emacs-Modus sieht wie folgt aus :

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

Dadurch werden die Tastenkombinationen Shift+ PageUpund Shift+ so eingestellt PageDown, dass im Kopiermodus eine halbe Seite nach oben bzw. unten gescrollt wird . Wenn Sie den vi-Modus verwenden, müssen Sie ihn folgendermaßen ändern:

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

Wenn Sie nun den Kopiermodus "automatisch" aktivieren und nicht verwenden möchten, können prefix-[Sie Ihrer Konfigurationsdatei die folgende Zeile hinzufügen:

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

Dies würde den Kopiermodus öffnen und eine (vollständige) Seite nach oben scrollen, wenn Sie im Bearbeitungsmodus (Standardmodus) Shift+ drücken PageUp. Wenn Sie den Kopiermodus nur öffnen möchten, ohne bereits eine Seite hochzuscrollen, lassen Sie das Symbol einfach weg -u. Und wenn Sie eine ganze Seite , um nach oben / unten oder nur eine Zeile können Sie die Schlüsselwörter verwenden page-up, scroll-upoder verwenden Sie einen der Befehle

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

um eine vollständige Liste der zu verwendenden Optionen und Standard-Tastenkombinationen anzuzeigen.

Max Matti
quelle
1
Ich bin nicht sicher, ob es sich um die Version handelt, die tmuxausgeführt wird oder nicht, aber der -tParameter wird nicht erkannt (-T funktioniert jedoch). Möglicher Tippfehler?
mdip
Höchstwahrscheinlich ein Tippfehler, aber auch nicht sinnvoll -n, da dies eine Abkürzung für-T root
smido 22.11.19
4

Hier ist eine Lösung, die nur mit Ihrem Muskelgedächtnis funktionieren sollte und es Ihnen ermöglicht, Shift+ PageUpund Shift+ PageDownwie im normalen Terminal zu verwenden.

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

Wenn Sie Vim verwenden, müssen Sie diese Bindung unter bestimmten Bedingungen aktivieren, da dies bei der Verwendung von PageUpusw. in Vim innerhalb von tmux zu Problemen führt.

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

(Danke an @ mjwhitta's Lösung, die dies verfeinert)

Jack Senechal
quelle
+1, bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"wurde aber benötigt, um Pageup zu veranlassen, mehrmals nach oben zu scrollen.
79E09796