tmux - cuộn lên / xuống với shift + trang lên / xuống vào một khung


14

Tôi muốn có thể cuộn lên / xuống vào một khung nhất định với cùng một thao tác gõ phím mà xterm thực hiện, tức là SHIFT + Page Up / Down.

Ví dụ: nếu cửa sổ tmux được chia thành 2 ô dọc, tôi có thể cuộn trên một trong hai bằng bàn phím trong khi cửa sổ kia không cuộn.

Có thể không?

Đây là tmux.conf của tôi:

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

Câu trả lời:


8

Để cuộn lên bạn có thể làm:

bind -n S-Pageup copy-mode -u

Ở trên dường như không hoạt động trên máy Mac, vì vậy tôi đã thử nghiệm với:

bind -n S-Up copy-mode -u

Theo như tôi có thể nói, sau khi nhấn S-Up, bạn có thể tiếp tục sử dụng S-Up hoặc chỉ trang lên để tiếp tục cuộn lên. Bạn có thể sử dụng trang xuống để cuộn xuống. Đây không phải là chính xác các ràng buộc chính mà bạn đang tìm kiếm, vì vậy tôi xin lỗi. Điều này sẽ giúp bạn đến gần hơn với mục tiêu của mình, tôi hy vọng.

BIÊN TẬP:

Tôi vừa thử nghiệm với:

bind -n Pageup copy-mode -u

và điều này cho phép bạn chỉ sử dụng trang lên và xuống trang.


Mặc dù bind -n Pageup copy-mode -ukhông cho phép tôi nhấn PGUp để vào chế độ sao chép và cuộn lên, nhưng sau đó tôi không thể sử dụng PGUp để tiếp tục cuộn lên.
apocryphalauthor

6

Có tôi biết câu hỏi này đã cũ nhưng nó không quá xa trong kết quả của google và tôi chỉ dành nhiều thời gian để tìm hiểu cách thực hiện đơn giản vì hầu như không có kết quả google nào có câu trả lời, chỉ có câu hỏi.

AFAIK chỉ có một ô cuộn khi ở chế độ sao chép. Để chuyển sang chế độ sao chép, bạn có thể sử dụng prefix-[và sau đó cuộn bằng C-upC-downhoặc bạn có thể đặt các phím bấm của riêng mình (trong tệp cấu hình) trong chế độ emacs trông như thế này:

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

Điều này sẽ đặt các tổ hợp phím Shift+ PageUpShift+ PageDownđể cuộn xuống một nửa trang tương ứng khi ở chế độ sao chép . Khi bạn đang sử dụng chế độ vi, bạn cần thay đổi nó thành một cái gì đó như thế này:

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

Bây giờ nếu bạn muốn vào chế độ sao chép "tự động" và không muốn sử dụng, prefix-[bạn có thể thêm dòng sau vào tệp cấu hình của mình:

bind-key -t root -n S-PPage copy-mode -u

Thao tác này sẽ mở chế độ sao chép và cuộn trang (đầy đủ) lên khi nhấn Shift+ PageUptrong Chế độ chỉnh sửa (chế độ mặc định). Để chỉ mở chế độ sao chép mà không cuộn trang, chỉ cần bỏ qua -u. Và nếu bạn muốn di chuyển một trang đầy đủ lên / xuống hay chỉ là một dòng bạn có thể sử dụng các từ khóa page-up, scroll-uphay một sử dụng các lệnh

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy

để xem danh sách đầy đủ các tùy chọn để sử dụng và các phím bấm mặc định.


1
Tôi không chắc đó có phải là phiên bản tmuxtôi đang chạy hay không, nhưng -ttham số không được nhận ra (tuy nhiên, -T hoạt động) Lỗi chính tả có thể xảy ra không?
mdip

Rất có thể là một lỗi đánh máy nhưng cũng không có nghĩa gì cả -n, vì đây là lối tắt cho-T root
smido

4

Đây là một giải pháp chỉ nên hoạt động với bộ nhớ cơ của bạn, cho phép bạn sử dụng Shift+ PageUpShift+ PageDownnhư trong thiết bị đầu cuối bình thường.

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

Nếu bạn đang sử dụng Vim, bạn sẽ muốn kích hoạt ràng buộc này một cách có điều kiện hoặc nó sẽ làm mọi thứ rối tung khi bạn sử dụng PageUp, v.v. trong vim bên trong tmux.

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

(Cảm ơn giải pháp của @ mjwhitta, điều này sẽ tinh chỉnh)


+1 nhưng bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"được yêu cầu để Pageup tiếp tục cuộn lên trên nhiều lần nhấn.
79E09796
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.