tmux-向上/向下滚动并按住shift +页面向上/向下进入窗格


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

Answers:


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

这样您就可以只使用向上翻页和向下翻页。


虽然bind -n Pageup copy-mode -u确实允许我按PgUp进入复制模式并向上滚动,但是我不能再使用PgUp继续向上滚动。
apocryphalauthor

6

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

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

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

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

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+ PageUpShift+ PageDown

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

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

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 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.