我使用的是 PuTTY、tmux 和 vim 的组合。如果我使用 PuTTY 打开 SSH 连接,然后打开 vim,鼠标滚动功能可以正常工作。但是,如果我打开 tmux,然后在 tmux 中打开 vim,则滚动功能只能部分正常工作,这意味着我可以像往常一样向下滚动,但无法向上滚动。如果我向上滚动,缓冲区只会“上下”抖动并停留在同一位置。“set -g mode-mouse on”似乎没有什么区别(我确实会在之后使用“tmux source-file ~/.tmux.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 中现有的问题。无论哪种情况,都需要进行一些额外的调查才能完全解决。如果这可以帮助任何人进行调查,请在下面找到一些相关的版本信息。
版本信息
Ubuntu 12.04vim
版本信息(在内部“向上滚动”tmux
作品):
tmux
:1.6-1vim
:7.3.429-2
Ubuntu 13.10vim
版本信息(在里面'tmux
向上滚动'破碎的):
tmux
:1.8-4vim
:7.4.000-1
还要注意的是——gmane 发帖者报告称在tmux
1.7 + vim
7.3 上未观察到此问题。发帖者第一次观察到此问题也是在tmux
1.8 + vim
7.4 上。
希望至少这个答案能为任何致力于(或坚持使用)PuTTY 的人提供一个解决这个问题的选项。除此之外,希望有人能理解上述额外的观察结果,并帮助正确解决该问题。
答案2
我在 ubuntu 16.04 上安装没有问题。tmux 是默认的 apt-get 安装版本。Vim 是版本 8。PuTTY 是版本 0.67
当在 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