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)
要向上滚动,您可以执行以下操作:
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)
这允许您只使用向上翻页和向下翻页。
这是一个应该只适用于您的肌肉记忆的解决方案,允许您使用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 的解决方案,它改进了)
是的,我知道这个问题很老,但它在谷歌结果中并没有那么远,我只是花了很多时间来找出如何去做,因为几乎没有谷歌结果包含答案,只有问题。
AFAIK 在复制模式下只有一个窗格滚动。要进入复制模式,您可以使用prefix-[,然后使用和滚动C-up,C-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+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
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-up,scroll-up或使用其中一个命令
tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy
Run Code Online (Sandbox Code Playgroud)
查看要使用的选项和默认键绑定的完整列表。