概括

概括

我使用的是 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 问题的潜在修复,以及对整个问题的分析。


问题描述

配置

vimmouse=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之间的负面互动是禁用滚动的主要原因之一。tmuxvimtmux

行为

请注意,以下情况仅在使用 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-1
  • vim:7.3.429-2

Ubuntu 13.10vim版本信息(在里面'tmux向上滚动'破碎的):

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

还要注意的是——gmane 发帖者报告称在tmux1.7 + vim7.3 上未观察到此问题。发帖者第一次观察到此问题也是在tmux1.8 + vim7.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

相关内容