tmux - 使用 shift + page up/down 向上/向下滚动到一个窗格中

use*_*662 18 keyboard-shortcuts scrolling tmux

我希望能够使用与 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
Run Code Online (Sandbox Code Playgroud)

mjw*_*tta 9

要向上滚动,您可以执行以下操作:

bind -n S-Pageup copy-mode -u
Run Code Online (Sandbox Code Playgroud)

以上似乎不适用于 Mac,所以我测试了:

bind -n S-Up copy-mode -u
Run Code Online (Sandbox Code Playgroud)

据我所知,按 S-Up 后,您可以继续使用 S-Up 或只是翻页来继续向上滚动。您可以使用 page-down 向下滚动。这些不是您正在寻找的键绑定,所以我很抱歉。我希望这应该会让你更接近你的目标。

编辑:

我刚刚测试过:

bind -n Pageup copy-mode -u
Run Code Online (Sandbox Code Playgroud)

这允许您只使用向上翻页和向下翻页。


Jac*_*hal 7

这是一个应该只适用于您的肌肉记忆的解决方案,允许您使用Shift+PageUp像在普通终端中一样和Shift+ PageDown

bind -n Pageup copy-mode -u
bind -n S-Pageup copy-mode -u
bind -n S-Pagedown send-keys Pagedown
Run Code Online (Sandbox Code Playgroud)

如果您正在使用 Vim,您将需要有条件地启用此绑定,否则当您PageUp在 tmux 内的 vim 中使用, etc时它会搞砸。

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
Run Code Online (Sandbox Code Playgroud)

(感谢@mjwhitta 的解决方案,它改进了)


Max*_*tti 6

是的,我知道这个问题很老,但它在谷歌结果中并没有那么远,我只是花了很多时间来找出如何去做,因为几乎没有谷歌结果包含答案,只有问题。

AFAIK 在复制模式下只有一个窗格滚动。要进入复制模式,您可以使用prefix-[,然后使用和滚动C-upC-down或者您可以设置自己的键绑定(在配置文件中),在 emacs-mode 中如下所示:

bind-key -t emacs-copy -n S-PPage halfpage-up
bind-key -t emacs-copy -n S-NPage halfpage-down
Run Code Online (Sandbox Code Playgroud)

这将设置组合键Shift+PageUpShift+在复制模式下PageDown分别向上滚动半页。当您使用 vi-mode 时,您需要将其更改为如下所示:

bind-key -t vi-copy -n S-PPage halfpage-up
bind-key -t vi-copy -n S-NPage halfpage-down
Run Code Online (Sandbox Code Playgroud)

现在,如果您想“自动”进入复制模式并且不想使用,prefix-[您可以将以下行添加到您的配置文件中:

bind-key -t root -n S-PPage copy-mode -u
Run Code Online (Sandbox Code Playgroud)

这将打开复制模式并在编辑模式(默认模式)中按Shift+时向上滚动(完整)页面PageUp。要仅打开复制模式而不向上滚动页面,只需省略-u. 如果您想向上/向下滚动整页或仅滚动一行,您可以使用关键字page-upscroll-up或使用其中一个命令

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy
Run Code Online (Sandbox Code Playgroud)

查看要使用的选项和默认键绑定的完整列表。

  • 我不确定它是否是我正在运行的“tmux”版本,但“-t”参数无法识别(但是,-T有效)可能是拼写错误? (2认同)