鼠标单击时 Vim 中出现奇怪的插入

鼠标单击时 Vim 中出现奇怪的插入

我使用 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

相关内容