點擊滑鼠時 Vim 中奇怪的插入

點擊滑鼠時 Vim 中奇怪的插入

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

相關內容