我使用 putty(在 Windows 7 上)连接到 shell 并使用 Vim 作为编辑器。我还在 Vim 中启用了 mouse=a 选项,但当我单击 Vim 窗口的右侧时(假设是屏幕宽度的 70% 以上区域,情况就会变得奇怪),出现了一些奇怪的行为(例如随机插入字符和/或换行符)。我正在慢慢习惯这种行为,但我真的很想知道是否可以以某种方式修复此问题。
答案1
PuTTY 使用 xterm 协议发送鼠标事件,该协议可以追溯到 20 世纪 80 年代中期的 X10。该协议使用每个行和列的单个字节对鼠标坐标进行编码,从而添加 32(空格字符的 ASCII 代码)。这允许坐标最大为 223(即 255 - 32)。
不幸的是,该编码不符合终端控制序列的适用标准,如果应用程序没有对此做出特殊允许,范围实际上可以进一步限制为 95(即 127 - 32)。特别是,如果应用程序在控制序列解析之前执行 UTF-8 解码,则超过 95 的鼠标坐标最终将被视为无效的 UTF-8。
在过去的一年中,人们曾多次尝试解决 xterm 中的这个问题。其中最好的一个是所谓的 SGR 1006 模式,它被添加到补丁 #277,它使用符合标准的控制序列,坐标不受限制。对此的支持将慢慢渗透到其他终端仿真器和应用程序中。
答案2
此问题已修复Vim 7.3.632。看看:h sgr-mouse
。或者直接把这个放到你的~/.vimrc
:
set ttymouse=sgr
如果想要与未编译的版本兼容mouse_sgr
,请使用:
if has("mouse_sgr")
set ttymouse=sgr
else
set ttymouse=xterm2
end
要查看你的 Vim 版本是否有mouse_sgr
,请vim --version
从命令行运行,或者在 Vim 中输入:version
,然后查找+mouse_sgr
。