tmux-Shiftキーを押しながらページを上下にスクロールしてペインに移動


14

xtermと同じキーバインド、つまりSHIFT + Page Up / Downを使用して、指定されたペインに上下にスクロールできるようにしたいと思います。

たとえば、tmuxウィンドウが2つの垂直ペインに分割されている場合、2つのうちの1つをキーボードでスクロールし、もう1つはスクロールしません。

出来ますか ?

これが私の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

回答:


8

上にスクロールするには:

bind -n S-Pageup copy-mode -u

上記はMacでは動作しないようですので、私は以下でテストしました:

bind -n S-Up copy-mode -u

私が知る限り、S-Upを押した後、S-Upを使用し続けるか、ページアップだけでスクロールアップを続けることができます。ページダウンを使用して下にスクロールできます。これらはまさにあなたが探していたキーバインディングではないので、おIび申し上げます。これにより、目標に近づくことができます。

編集:

私はちょうどでテストしました:

bind -n Pageup copy-mode -u

これにより、ページアップとページダウンだけを使用できます。


一方でbind -n Pageup copy-mode -u私は、コピーモードに入り、スクロールアップするためにPgUpキーを押すことができない、私はその後、上にスクロール維持するためにPgUpキーを使用することはできません。
apocryphalauthor

6

はい、私はこの質問が古いことを知っていますが、それはグーグルの結果ではそれほど下ではなく、グーグルの結果にはほとんど答えが含まれておらず、質問だけが含まれているため、それを行う方法を見つけるために多くの時間を費やしました。

私の知る限り、コピーモードでは1つのペインのみがスクロールします。コピーモードに移行するには、使用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ます。また、ページ全体を上下または1行だけスクロールする場合は、キーワードpage-upscroll-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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.