Cuộn đầu ra vỏ bằng chuột trong tmux


256

Cuộn chuột không hoạt động trong tmux theo cách nó hoạt động khi tôi chạy shell mà không có tmux (trong Gnome Terminal). Có vẻ như tmux gửi các sự kiện cuộn chuột như thể tôi nhấn phím Lên / Xuống. Nhưng tôi muốn nó cuộn qua lịch sử đầu ra shell . Có cách nào để làm cho tmux hoạt động như thế này không?

Lưu ý: Tôi biết cách cuộn bằng bàn phím (nhờ một câu hỏi khác ở đây).

Tôi đã thử cuộn chuột trong hai phiên bản của tmux:


1
Tôi nghĩ câu trả lời của bukzor giải quyết vấn đề của bạn cho tmux 1.5 và mới hơn.
kynan

Câu trả lời:


252

Để cuộn trong lịch sử đầu ra Bạn sẽ sử dụng ^b+ [ Sau đó, bạn có thể sử dụng M + V để trang lên và ^ V để trang xuống. Tôi không biết nếu bạn có thể sử dụng thực tế PgUpPgDownmặc dù. Thiết bị đầu cuối của tôi không gửi các khóa này đến tmux. Thay vào đó, nó tự cuộn và không phải là lịch sử tmux.

Để thoát chế độ sao chép, nhấn ESC

Để sử dụng chuột trong chế độ này (được gọi là chế độ sao chép), bấm ^b+ : và nhập như sau:

setw -g mouse on

Lưu ý: Trong tmux <2.1, tùy chọn đã được đặt tên mode-mousevà khôngmouse

Bây giờ khi bạn thay đổi chế độ sao chép, bạn có thể sử dụng chuột để cuộn qua nó. Bạn có thể đặt lệnh này trong ~ / .tmux.conf nếu bạn muốn nó tải mỗi lần Bạn chạy tmux.

Cập nhật: Kể từ tmux 1.5, tùy chọn này giúp sử dụng bánh xe cuộn tự động chuyển sang chế độ sao chép và cuộn lại bộ đệm cuộn tmux. Không cần thiết phải đánh đầu tiên Ctrl-B+ [nữa. Cuộn ngược xuống dấu nhắc cũng tự động kết thúc chế độ sao chép.


1
Lưu ý rằng bạn có thể phải tải lại tệp cấu hình nếu bạn đã có máy chủ tmux đang chạy. blog.sanctum.geek.nz/reloading-tmux-config tmux source-file ~ / .tmux.conf
Allan Nienhuis

7
Không làm việc cho tôi trên OS X.
Ain

2
@Ain - Hiện tại có 11 phiên bản chính của OS X. Chúng ta đang nói về phiên bản nào chính xác?
Ramhound 8/07/2015

10
Đối với tmux> = 2.1, hãy xem câu trả lời của @ DanielRe (hiện tại khá xa).
joelostblom

3
set -g mouse onlàm việc cho tôi trên macOS tmux 2.1
Miguel Mota

123

Có một số thay đổi cho Tmux 2.1

  • Chế độ chuột đã được viết lại. Bây giờ không còn tùy chọn cho:

    • chuột thay đổi kích thước
    • chọn chuột
    • chọn chuột
    • chuột chế độ

    Thay vào đó, chỉ có một tùy chọn: 'chuột' bật hoàn toàn hỗ trợ chuột.

Đó sẽ là

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

6
Cảm ơn, bây giờ chọn panes, vv hoạt động, nhưng cuộn không. Để làm cho công việc cuộn trở lại, hãy sử dụng: github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
tuyệt vời - điều này thậm chí hoạt động trên cygwin - tmux trên WINDOWS 7
GWD

@Mahdi Điều này dường như không hoạt động trên osx. Có gợi ý nào không?
DiTTiD

2
binddường như không còn cần thiết nữa trên tmux 2.3
Theron Luhn

2
+1 cho set -g mouse on. Nhận xét trước là đúng. Các ràng buộc không còn cần thiết.
Dakusan

63

Phiên bản hiện tại của tmux (1.5) cho phép bạn chỉ cần đặt tùy chọn chuột chế độ và cho phép bạn cuộn bằng bánh xe chuột.

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

Trong .tmux.conf của tôi:

set-window-option -g mode-mouse on

Đó là hành vi bạn thực sự muốn! Cuộn chuột cho phép chế độ sao chép, không chỉ cuộn bộ đệm thay thế. Đó cuối cùng là động lực để chuyển từ màn hình sang tmux cho tôi. Có một tùy chọn để có được hành vi tương tự cũng với Shift + PGUp không?
kynan

1
@kynan: Cá nhân tôi chỉ nhấn C-A PgUpđể làm điều đó. Bạn có thể liên kết khóa trang trực tiếp với tmux bind-key -n PPage copy-mode -u. Thign tương tự sẽ hoạt động cho shift + pageup nếu bạn hủy liên kết nó khỏi thiết bị đầu cuối cục bộ của bạn.
bukzor

1
Điều này dẫn đến một hành vi kỳ lạ khi tôi cuộn trở lại dòng lệnh, tôi nhận được một ký tự phụ được chèn vào CLI, điều này thường dẫn đến lệnh đầu tiên của tôi bị sai. Nó khá là khó chịu.
Chris R

Lưu ý rằng, tuy nhiên điều này hoạt động tốt khi kích hoạt cuộn bằng chuột, nó gây ra hành vi kỳ quặc khi chọn văn bản được dán bằng nhấp chuột giữa. Tôi đã kết thúc trước Cb pg-up / down (mặc định) vì sự đánh đổi không được chấp nhận.
h7r

@ChrisR Tôi cũng nhận được điều này khá nhiều và nó không hoàn toàn phù hợp. Đây có phải là [M [M # [M [M # [M [M # [M [M # [M loại chuỗi không?
Elijah Lynn

53

Hãy thử điều này trong .tmux.conf của bạn

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

Lấy từ http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


+1 để escape-timecài đặt
Dakusan

Đối với bất kỳ ai khác thắc mắc, tệp .tmux.conf được đặt trong thư mục chính của bạn.
dùng2648513

15

Ai đó (từ một nguồn tôi bị mất) đề nghị thêm vào như sau ~.tmux.conf:

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Tôi không biết làm thế nào nó hoạt động hoặc những gì nó làm, nhưng điều này bây giờ cho phép tôi cuộn bằng bánh xe chuột trong một phiên tmux mà không cần phải vào chế độ sao chép của tmux; Tôi chỉ cần cuộn bánh xe và BAM! nó hoạt động Lưu ý rằng tôi đang sử dụng terminal.app, nhưng tôi nhớ OP đã đưa ra câu trả lời cụ thể để sử dụng với gnome-terminal.


1
Jed, cảm ơn bạn! Lời khuyên của bạn cũng hoạt động trong gnome-terminal. Tôi sẽ cố gắng sử dụng thiết lập này một thời gian. Nhưng nó có một nhược điểm: cuộn chuột bây giờ không hoạt động như mong đợi less. Nếu tôi tải lessbên trong tmux, cuộn chuột không cuộn tập tin đã mở less. Nó cuộn toàn bộ thiết bị đầu cuối. Kỳ lạ thay, vimhành xử như mong đợi bên trong tmuxvới thiết lập của bạn.
dùng31494

2
Lưu ý rằng kể từ tmux 1.5 setw -g mode-mouse on, tùy chọn này được thay thế bởi tùy chọn, sao chép chế độ cuộn lại bằng cách sử dụng bánh xe chuột.
kynan

3
Giải thích là tùy chọn này vô hiệu hóa khóa cuộn trên màn hình thay thế của thiết bị đầu cuối, điều này là mong muốn trong hầu hết các trường hợp vì các ứng dụng yêu cầu bộ đệm màn hình thay thế (vi, ít hơn, tmux, v.v.) cung cấp khả năng cuộn của riêng chúng. Ghi đè khóa này trong tmux cho phép cuộn bộ đệm màn hình thay thế của thiết bị đầu cuối mà không mang lại kết quả mong muốn trong tất cả trừ một vài trường hợp. Xem câu trả lời này cho một trích dẫn từ man xtermgiải thích màn hình thay thế.
kynan

Than ôi, điều này không hoạt động trong iTerm
Suan

Tôi đã có kết quả tích cực với điều này trong iTerm 2
Keith Smiley

5

tmux 2.1 giới thiệu liên kết chuột mới.

Tôi đã viết những ràng buộc này ngay hôm nay. Nó liên tục liên kết bánh xe chuột với mũi tên khi không ở trong Vim, vì Vim có khả năng diễn giải mã bánh xe chuột thô (cho các mục đích như chọn cửa sổ Vim nào để cuộn cho bạn tùy thuộc vào con chuột nào của bạn).

Điều này có nghĩa là cuối cùng chúng ta chỉ có thể sử dụng chuột để xem nhiều trang man và bất cứ điều gì khác chấp nhận các phím mũi tên. Bạn có thể mở rộng và xâu chuỗi iflogic khi cần thiết để triển khai nhiều logic hơn cho các ứng dụng của mình.

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

Với khả năng liên kết bánh xe mới này, có thể kịch bản bánh xe chuột để thực hiện bất kỳ hành vi nhạy cảm theo ngữ cảnh nào bạn muốn.


Bây giờ tôi chỉ là một loại đồ chơi với ý tưởng làm cho con lăn trên đường viền khung làm một cái gì đó thú vị. Có lẽ những gì tôi sẽ làm không phải là ánh xạ bánh xe trên đường viền mà là ánh xạ nó để xoay vòng các cửa sổ tmux khi thực hiện trên dòng trạng thái.
Steven Lu

Liên kết đến Github của bạn là gì? Tôi muốn theo kịp những nỗ lực của bạn! Một tính năng khác mà tôi đang tìm kiếm là nhấp đúp vào sao chép từ vào bảng tạm X, giống như bên ngoài Tmux.
joeytwiddle 30/03/2016

@joeytwiddle Tôi rất khuyên bạn nên github.com/NHDaly/tmux-better-mouse-mode , xem câu trả lời khác của tôi
Steven Lu

3

Gnome-terminal thực hiện một số thủ thuật gọn gàng dịch các sự kiện cuộn chuột sang các phím mũi tên Lên và Xuống trong điều kiện cuộn "thông thường" bị hạn chế. Ví dụ, khi bạn xem một số văn bản sử dụng less(điều này xảy ra đặc biệt là khi bạn đang đọc một người đàn ông), bạn có thể cuộn nội dung sử dụng j, kvà các phím mũi tên. Nhưng cũng với gnome-terminal, bạn có thể làm điều đó với di chuyển chuột, nhờ sự lừa nêu.

Vì vậy, tôi đoán rằng tmuxmột số "bắt" của thiết bị đầu cuối giống như less- và cơ chế tương tự trong gnome-terminalkhởi động: cuộn chuột chuyển thành phím bấm mũi tên Lên / Xuống.

Bạn có thể tắt tính năng này trong cài đặt cấu hình và nhận cuộn thông thường trong mọi trường hợp. Chỉ cần bỏ đánh dấu hộp kiểm cuối cùng trong tab "cuộn" : hộp kiểm.


Cảm ơn bạn đã giải thích, uldtko! Nhưng nó không giúp gì cho vấn đề cuộn chuột. Có, với tùy chọn đã tắt, gnome-terminaldừng gửi ba ^[[A^[[Bkhi cuộn chuột. Nó đẹp hơn tmux(không xấu ^[[A^[[A^[[Atrong một số chương trình, không cuộn lịch sử lệnh xấu xí), nhưng bây giờ lessdừng cuộn khi cuộn chuột.
dùng31494

1
Tiếng Ukraina? (đoán theo các inhân vật)
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

Cấu hình điều khiển chuột có thể cấu hình và giàu tính năng cho các tmux mới hơn. rat khuyen khich.

Bạn có thể muốn sử dụng

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

với nó cũng được.


Tôi đã cài đặt cái này nhưng không còn có thể làm nổi bật và sao chép văn bản bằng chuột. Bạn có thể làm điều này?
jonathanking

Có, bạn có thể có cấu hình tmux liên quan đến chuột khác xung đột với nó.
Steven Lu

0

Bạn có thể kết hợp các ý tưởng ràng buộc từ các câu trả lời khác để có được hành vi cuộn khá thỏa mãn: hoạt động trong vim thay đổi chế độ sao chép tự động trong thiết bị đầu cuối và thoát ra khi bạn chạm đáy vẫn cho phép bạn sử dụng con lăn chuột của mình, ít hơn và nhật ký.

Ma cua toi:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

bạn có thể thêm các lệnh khác yêu cầu các phím mũi tên để cuộn trong phần grep -e 'man'

tôi đã thêm các phím gửi nhiều lần, vì vậy một tích tắc trên con lăn chuột sẽ cuộn 4 dòng cùng một lúc


0

Nếu bạn đã ở trong phiên tmux, bạn có thể chạy lệnh

set mouse on

Nhắc nhở: để chạy lệnh, sử dụng tiền tố của bạn sau đó :.

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.