
我使用 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-1vim
:7.3.429-2
烏班圖13.10vim
版本資訊(在裡面「向上滾動」tmux
是破碎的):
tmux
:1.8-4vim
:7.4.000-1
另外值得注意的是,gmane 發文者報告說在tmux
1.7 + vim
7.3 上沒有觀察到這個問題。 Poster 對這個問題的首次觀察也是在tmux
1.8 + vim
7.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