我正在使用 putty(在 Windows 7 上)連接到 shell 和 Vim 作為編輯器。我還在Vim 中啟用了mouse=a 選項,但是當我單擊Vim 視窗的右側(假設它的70% 以上)時,我會遇到一些奇怪的行為(例如隨機插入字元和/或換行符)螢幕寬度區域變得很奇怪)。我正在慢慢習慣這種行為,但我真的很想知道是否可以以某種方式解決這個問題。
答案1
PuTTY 使用 xterm 協定發送滑鼠事件,該協議的歷史可以追溯到 80 年代中期的 X10。這對行和列各使用一個位元組對滑鼠座標進行編碼,其中新增了 32(空格字元的 ASCII 代碼)。這允許座標最大為 223(即 255 - 32)。
不幸的是,該編碼不符合終端控制序列的適用標準,並且如果應用程式不對其進行特殊考慮,則範圍可以有效地進一步限制為 95(即 127 - 32)。特別是,如果應用程式在控制序列解析之前執行 UTF-8 解碼,則超過 95 的滑鼠座標最終會被視為無效 UTF-8。
在過去的一年裡,xterm 中已經多次嘗試解決這個問題。其中最好的一個是添加了所謂的 SGR 1006 模式補丁 #277,它使用具有無限座標的符合標準的控制序列。對此的支援將慢慢滲透到其他終端模擬器和應用程式。
答案2
這已修復在維姆 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
。