概括

概括

我使用 PuTTY、tmux 和 vim 的組合。如果我只是使用 PuTTY 打開 SSH 連接,然後打開 vim,滑鼠滾動將按預期工作。但是,如果我打開 tmux,然後在 tmux 中打開 vim,則滾動只能部分起作用,這意味著我可以像往常一樣向下滾動,但無法向上滾動。如果我向上滾動,緩衝區只會「上下」抖動並停留在同一位置。 「set -g mode-mouse on」似乎沒有什麼區別(我隨後使用「tmux source-file ~/.tmux.conf」重新載入conf),無論哪種方式都以相同的方式運作。

編輯:我還注意到滾動在終端的 tmux 中按預期工作,但在 vim 中卻不然。我在 vim 中唯一與滑鼠/終端相關的選項是“set mouse=a”和“set t_Co=256”。

有任何想法嗎?

答案1

概括

問題顯然是從 PuTTY 開始的,但不一定就此結束。下面有一個指向 PuTTY 問題的潛在解決方案的鏈接,以及對整個問題的分析。


問題描述

配置

vim啟用mouse=a捲動、選擇和遊標移動

tmux,未tmux啟用滑鼠功能,即以下內容:

set -g mode-mouse off
set -g mouse-select-pane off
set -g mouse-resize-pane off
set -g mouse-select-window off

使用案例

一個典型的用例是使用vim 裡面tmux。避免tmux和之間的負面交互vim是禁用滾動的主要原因之一tmux

行為

請注意,以下情況僅在使用 PuTTY 作為終端模擬器時發生,並且在 gnome-terminal 或任何其他經過測試的 Linux 終端模擬器中無法重現。

當嘗試使用滑鼠“向上滾動”時vim 裡面會話結束後tmux,該操作就會失敗。正如OP所描述的,通常可以看到緩衝區「上下」抖動,就好像每次滾動嘗試都會發生反作用(下面將詳細介紹)。

這與OP的描述基本上相同,但重述以防萬一我的解釋或OP的問題中有些內容不清楚。


潛在的解決方案—PuTTY

似乎有這樣的問題:PuTTY 會隨每個 ScrollDown/ScrollUp 事件傳送一個無關的 ScrollDown 事件。這意味著每次向上滾動的嘗試都會被取消,並且什麼都不會發生。相反,當向下滾動時,每個滾動事件加倍。透過查看vim滾動行為很容易驗證該行為首先外面tmux(滾動正常的情況),以及第二個裡面tmux其中向上滾動不起作用,並且一次嘗試向下滾動會滾動兩倍)。

根據以下 gmane 線程,上述問題已透過 Putty-X 的補丁解決(https://github.com/atsepkov/putty-X/commit/bbcedf5a85ca1ccaa27005e7f7ebeb4c8a783b88):

連結到 gmane 線程:http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/5498

筆記:我自己尚未驗證上述解決方案,因此請查看 gmane 線程以獲取更多資訊。


額外的觀察

在哪裡真的有趣的是,這是一個新問題,無法使用舊版的tmux/重現vim。使用相同版本的 PuTTY (0.63),可以在 Ubuntu 13.10 系統上主動示範該問題,而 Ubuntu 12.04 系統則不會出現該問題。

起初,問題似乎指向系統配置增量(即缺少 ncurses-term 或類似內容),但使用此類解決方案尚未找到修復方法。此外,同一問題的多個報告(包括此線程)往往支援該問題的存在。

由於該問題和相關軟體版本的相互依賴性質,該問題似乎並不局限於單一應用程式。可能是tmux/的新版本vim“修復”了導致回歸的某些內容。或者,新版本的tmux/可能vim只是暴露了 PuTTY 中現有的問題。無論哪種方式,都需要進行一些額外的調查才能完全解決。如果這可以幫助任何人進行調查,請在下面找到一些相關的版本資訊。


版本資訊

烏班圖12.04vim版本資訊(在裡面“向上滾動”tmux 作品):

  • tmux:1.6-1
  • vim:7.3.429-2

烏班圖13.10vim版本資訊(在裡面「向上滾動」tmux破碎的):

  • tmux:1.8-4
  • vim:7.4.000-1

另外值得注意的是,gmane 發文者報告說在tmux1.7 + vim7.3 上沒有觀察到這個問題。 Poster 對這個問題的首次觀察也是在tmux1.8 + vim7.4 上。


希望這個答案至少可以為致力於(或堅持使用)PuTTY 的任何人提供解決此問題的選項。除此之外,希望有人能夠理解上述額外的觀察結果,並幫助主題得到適當的解決。

答案2

我安裝 ubuntu 16.04 沒有問題。 tmux 是預設安裝的 apt-get 版本。 Vim 是版本 8。

當託管在 tmux 會話中時,滾動和點擊都可以在 vim 內工作。

~/.tmux.conf

set-option -g mouse on

請注意,用於滑鼠控制的 tmux 選項與早期版本相比已變更。

〜/.vimrc

set mouse=a

意識到這個答案表明 vim 插件可能是問題的原因。

答案3

對於最終到達這裡的任何人:此問題已在 0.64 預發行版中修復,您可以從 PuTTY 官方網站下載。

答案4

這是我能夠使滾動正常工作的唯一方法:

放:

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

在文件中:~/.tmux.conf

相關內容