tmux - прокрутка вверх / вниз с помощью shift + page up / down на панель

14

Я хотел бы иметь возможность прокручивать вверх / вниз на заданную панель с той же привязкой клавиш, что и xterm, т.е. SHIFT + Page Up / Down.

Например, если окно tmux разделено на 2 вертикальные панели, я мог бы прокручивать одну из двух с помощью клавиатуры, а другая не прокручивать.

Является ли это возможным ?

Вот мой 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
источник

Ответы:

8

Для прокрутки вверх вы можете сделать:

bind -n S-Pageup copy-mode -u

Вышеуказанное не работает на Mac, поэтому я протестировал:

bind -n S-Up copy-mode -u

Насколько я могу судить, после нажатия S-Up вы можете продолжать использовать S-Up или просто перелистывать страницы, чтобы продолжать прокрутку вверх. Вы можете использовать страницу вниз, чтобы прокрутить вниз. Это не совсем то, что вы искали, поэтому прошу прощения. Это должно приблизить вас к вашей цели, я надеюсь.

РЕДАКТИРОВАТЬ:

Я только что проверил с:

bind -n Pageup copy-mode -u

и это позволяет вам использовать только страницы вверх и вниз страницы.

mjwhitta
источник
Хотя bind -n Pageup copy-mode -uя могу нажать PgUp, чтобы перейти в режим копирования и прокрутить вверх, я не могу использовать PgUp для прокрутки вверх.
apocryphalauthor
6

Да, я знаю, что этот вопрос старый, но он не так уж далек в результатах Google, и я потратил много времени, чтобы выяснить, как это сделать, просто потому, что в результатах Google почти нет ответа, только вопросы.

AFAIK прокручивает только одну панель в режиме копирования. Для перехода в режим копирования можно использовать , prefix-[а затем прокручивать с помощью C-upи C-downили вы можете установить свои собственные сочетания клавиш (в конфигурационном файле) , который в Emacs-режиме выглядит следующим образом :

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

Это установит комбинации клавиш Shift+ PageUpи Shift+ PageDownдля прокрутки на половину страницы вверх соответственно вниз в режиме копирования . Когда вы используете vi-mode, вам нужно изменить его на что-то вроде этого:

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

Теперь, если вы хотите войти в режим копирования «автоматически» и не хотите использовать его, prefix-[вы можете добавить следующую строку в ваш файл конфигурации:

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

Это откроет режим копирования и прокрутит (полную) страницу вверх при нажатии Shift+ PageUpв режиме редактирования (режим по умолчанию). Чтобы открыть только режим копирования без прокрутки страницы, просто опустите -u. И если вы хотите , чтобы просмотреть полную страницу вверх / вниз или просто линия , которую Вы можете использовать ключевые слова page-up, scroll-upили использовать одну из команд

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

чтобы увидеть полный список вариантов использования и привязок клавиш по умолчанию.

Макс Матти
источник
1
Я не уверен, tmuxзапущена ли у меня версия или нет, но -tпараметр не распознается (однако, -T работает) Возможная опечатка?
mdip
Скорее всего , опечатка , но и не это не имеет смысла , вместе с -n, так как это ярлык для-T root
smido
4

Вот решение, которое должно работать только с вашей мышечной памятью, позволяя вам использовать Shift+ PageUpиShift +, PageDownкак в обычном терминале.

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

Если вы используете Vim, вам нужно условно включить эту привязку, иначе она будет портиться, когда вы используете PageUp, и т. Д. В vim внутри 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

(Благодаря решению @ mjwhitta, которое это уточняет)

Джек Сенечал
источник
+1, но bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"было необходимо, чтобы Pageup продолжил прокрутку вверх на нескольких нажатиях.
79E09796