web-dev-qa-db-ja.com

tmux-上にスクロール/下にスクロール+ページを上下にペインに移動

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
14
user1610662

上にスクロールするには、次の操作を実行できます。

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

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

8
mjwhitta

はい、私はこの質問が古いことを知っていますが、Googleの検索結果ではそれほど遠くないので、Googleの検索結果に回答がほとんどなく、質問だけが含まれているため、その方法を見つけるのに多くの時間を費やしました。

コピーモードでは、1つのペインのみスクロールします。コピーモードにするには、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

これはキーの組み合わせを設定します Shift+PageUp そして Shift+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

使用するオプションとデフォルトのキーバインドの完全なリストを表示します。

6
Max Matti

これは、筋肉の記憶だけで機能し、使用できるソリューションです 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、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のソリューションに感謝します)

4
Jack Senechal