題 在tmux中使用鼠標滾動shell輸出


鼠標滾動無效 TMUX 當我在沒有tmux的情況下運行shell時(在Gnome終端中)它的工作方式。似乎tmux發送鼠標滾動事件就好像我按下向上/向下鍵。但我想讓它滾動shell 產量 歷史。有沒有辦法讓tmux像這樣工作?

注意: 我知道如何用鍵盤滾動(感謝 另一個問題 這裡)。

我在兩個版本的tmux中試過鼠標滾動:


228
2017-11-12 14:02


起源


我認為bukzor的答案解決了tmux 1.5和更新版本的問題。 - kynan


答案:


要在您將使用的輸出的歷史記錄中滾動 ^b + [  然後,您可以使用M + V進行翻頁,使用^ V進行翻頁。我不知道你是否可以使用真實的 PgUp鍵 和 PgDown鍵 雖然。我的終端不會將這些密鑰發送到tmux。相反,它滾動自己而不是tmux歷史。

要退出複印模式,請按ESC

要在此模式下使用鼠標(稱為複印模式),請按 ^b + : 並輸入以下內容:

setw -g mouse on

注意:在tmux <2.1中,該選項已命名 mode-mouse, 並不是 mouse

現在,當您切換到復制模式時,您可以使用鼠標滾動它。 您可以將此命令放在〜/ .tmux.conf中,如果您希望這樣,它會在您每次運行tmux時加載。

更新: 從tmux 1.5開始,此選項使用滾輪自動切換到復制模式並向後滾動tmux回滾緩衝區。沒有必要先打 Ctrl-B + [ 再也沒有。向下滾動到提示也會自動結束複製模式。


214
2017-12-01 18:48



請注意,如果您已經有一個正在運行的tmux服務器,則可能必須重新加載配置文件。 blog.sanctum.geek.nz/reloading-tmux-config  tmux source-file~ / .tmux.conf - Allan Nienhuis
在OS X上不適合我。 - Ain
@Ain - OS X現在有11個主要版本。我們正在談論哪個版本? - Ramhound
對於tmux> = 2.1,請參閱@ DannyRe的答案(目前相當遠)。 - joelostblom
set -g mouse on 在macOS tmux 2.1上為我工作 - Miguel Mota


Tmux 2.1有一些變化

  • 鼠標模式已被重寫。現在不再有選擇:

    • 鼠標調整大小窗格
    • 鼠標選擇窗格
    • 鼠標選擇窗口
    • 模式小鼠

    相反,只有一個選項:'鼠標'打開鼠標支持 完全。

那就是

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'"

114
2017-10-19 11:02



謝謝,現在選擇窗格等工作,但滾動沒有。為了使滾動再次工作,請使用: github.com/NHDaly/tmux-scroll-copy-mode - Mahdi
太棒了 - 這甚至適用於WINDOWS 7上的cygwin - tmux - WD11
@Mahdi這似乎對osx無效。任何提示? - SolidSnake
@SolidSnake:我不記得使用該插件遇到任何問題。它工作順利,我啟用鼠標模式,然後安裝它。您應該使用重新加載您的tmux配置 tmux source-file ~/.tmux.conf - Mahdi
bind 在tmux 2.3上似乎不再需要了 - Theron Luhn


當前版本的tmux(1.5)允許您簡單地設置模式鼠標選項,並允許您使用鼠標滾輪滾動。

         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.

在我的.tmux.conf中:

set-window-option -g mode-mouse on

61
2017-11-15 20:05



那是你真正想要的行為!鼠標滾動啟用複制模式,而不僅僅是滾動shell備用緩衝區。這最終是轉向的動力 屏幕 至 TMUX 為了我。是否有一個選項可以使用Shift + PgUp獲得相同的行為? - kynan
@kynan:我個人只是按 C-A PgUp 要做到這一點。您可以直接綁定頁面向上鍵 tmux bind-key -n PPage copy-mode -u。如果你從本地終端取消綁定,那麼類似的thign應該適用於shift + pageup。 - bukzor
這會產生奇怪的行為,當我滾動回命令行時,我會在CLI中插入一個額外的字符,這通常會導致我的第一個命令格式錯誤。這很煩人。 - Chris R
請注意,但是這適用於使用鼠標觸發滾動,在選擇要粘貼中間的文本時會導致奇怪的行為。由於權衡不可接受,我最終在C-b pg-up / down(默認值)上受到了影響。 - h7r
@ChrisR我也得到了這個並且它不太一致。它是[M [M#[M [M#[M [M#[M [M#[M型字符串? - Elijah Lynn


在.tmux.conf中試試這個

# 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

取自 http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


51
2017-10-24 16:55



+1為 escape-time 設置 - Dakusan


有人(從我丟失的來源)建議添加以下內容 ~.tmux.conf

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

我不知道它是如何工作的或者它做了什麼,但是這現在允許我在tmux會話中滾動鼠標滾輪而不必進入tmux的複制模式;我只是滾動方向盤和BAM!有用。請注意,我正在使用terminal.app,但我記得OP給出了專門用於的答案 gnome-terminal


14
2018-06-22 17:10



傑德,謝謝!你的建議也適用於gnome-terminal。我將嘗試使用此設置一段時間。但它有一個缺點:鼠標滾動現在不能按預期工作 less。如果我加載 less 內 tmux,鼠標滾動不會滾動打開的文件 less。它滾動整個終端。奇怪的是, vim 表現如預期的那樣 tmux 與您的設置。 - user31494
請注意,從tmux 1.5開始,這被取代了 setw -g mode-mouse on 選項,使用鼠標滾輪進行複制模式回滾。 - kynan
解釋是此選項禁用終端備用屏幕上的滾動鎖定,這在大多數情況下是理想的,因為請求備用屏幕緩衝區(vi,less,tmux等)的應用程序提供它們自己的滾動功能。在tmux中覆蓋此鎖定允許滾動 終端的備用屏幕緩衝區 除了少數情況外,除了少數情況外,它們沒有給出所需的結果。看到 這個答案 引用來自 man xterm 解釋備用屏幕。 - kynan
唉,這在iTerm中不起作用 - Suan
我在iTerm 2中得到了積極的結果 - Keith Smiley


tmux 2.1引入了新的鼠標綁定。

我今天剛剛寫了這些約束。當它不在Vim中時,它將鼠標滾輪無縫地綁定到箭頭,因為Vim能夠解釋原始鼠標滾輪代碼(用於選擇哪個Vim窗口為您滾動,取決於您的鼠標在哪一個)。

這意味著我們最終只能使用鼠標來查看多個手冊頁以及其他任何接受箭頭鍵的內容。你可以擴展和鏈接 if 為您的應用程序實現更多邏輯所必需的邏輯。

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"

借助這種新的車輪裝訂功能,可以編寫鼠標滾輪腳本來執行您喜歡的任何上下文敏感行為。


5
2017-12-15 23:44



我現在只是想在窗格邊框上製作鼠標輪做一些有趣的事情。可能我要做的不是邊界上的地圖輪,而是將其映射到在狀態線上完成時循環tmux窗口。 - Steven Lu
什麼是你的Github的鏈接?我想及時了解你的努力!我正在尋找的另一個功能是雙擊將單詞複製到X剪貼板,就像它在Tmux之外一樣。 - joeytwiddle
@joeytwiddle我強烈推薦 github.com/NHDaly/tmux-better-mouse-mode,看到我的其他答案 - Steven Lu


Gnome-terminal在限制“通常”滾動條件下,將鼠標滾動事件轉換為向上和向下箭頭鍵。例如,當您使用查看某些文本時 less (尤其是當你正在閱讀一個男人時),你可以使用滾動內容 jk和箭頭鍵。但 ,與 gnome-terminal,你可以用鼠標滾動來做到這一點,這要歸功於上面提到的技巧。

所以我想 tmux 做一些“捕獲”終端就像 less  - 和相同的機制 gnome-terminal 踢入:鼠標滾動轉換為向上/向下箭頭鍵按下。

您可以在配置文件設置中關閉此功能,並在任何情況下進行常規滾動。只需取消標記“滾動”標籤中的最後一個複選框: the checkbox


3
2017-12-07 07:03



感謝您的解釋,uldtko!但它對鼠標滾動問題沒有幫助。是的,關閉選項, gnome-terminal 停止發送三聯 ^[[A 和 ^[[B 在鼠標滾動。它更好 tmux (不難看 ^[[A^[[A^[[A 在某些程序中,沒有醜陋的命令歷史滾動),但現在 less 停止滾動鼠標滾動。 - user31494
烏克蘭? (猜測 i 字符) - dotancohen


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

可配置且功能豐富的鼠標控件實現,適用於較新的tmux。強烈推薦。

你可能想用

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

用它也。


0
2018-01-02 23:48