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

3 ответа3

7

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

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

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

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

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

3

Вот решение, которое должно работать только с вашей мышечной памятью, позволяя вам использовать 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, которое это уточняет)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .