Странная вставка из Vim по щелчку мыши

5

Я использую замазку (на Windows 7) для подключения к оболочке и Vim в качестве редактора. У меня также есть мышь = опция включена в Vim, но я получаю странное поведение (например, случайные вставки символов и / или разрывы строк), когда я щелкаю справа от окна Vim (скажем, это как 70% + область ширины экрана, где это становится странным). Я постепенно привыкаю к ​​такому поведению, но мне бы очень хотелось узнать, смогу ли я как-нибудь это исправить.

kK-Storm
источник
Насколько велико ваше окно с точки зрения ячеек персонажа? Исходный протокол мыши xterm, реализованный PuTTY, поддерживает только координаты мыши до 223.
ak2
Спасибо, я не знал о таких ограничениях. Размер окна измеряется в строках и столбцах в PuTTY, поэтому после нескольких попыток я выяснил, что 95 столбцов идеально подходят для протокола мыши xterm. Вы не против оставить свое решение как ответ, чтобы я мог отметить его как лучший? :)
kK-Storm

Ответы:

7

PuTTY отправляет события мыши по протоколу xterm, который восходит к X10 в середине восьмидесятых годов. Это кодирует координаты мыши по одному байту для строки и столбца, в результате чего добавляется 32 (код ASCII для пробела). Это учитывает координаты до 223 (что составляет 255 - 32).

К сожалению, это кодирование не соответствует применимым стандартам для последовательностей управления терминалом, и диапазон может быть эффективно ограничен до 95 (то есть 127 - 32), если приложения не делают специальных допусков для него. В частности, если приложение выполняет декодирование UTF-8 перед синтаксическим разбором управляющей последовательности, координаты мыши за пределами 95 просто оказываются недействительными в качестве недействительного UTF-8.

В течение прошлого года было предпринято несколько попыток решить эту проблему в xterm. Лучшим из них является так называемый режим SGR 1006, добавленный в патч № 277 , который использует стандартную последовательность управления с неограниченными координатами. Поддержка этого будет медленно распространяться на другие эмуляторы терминала и приложения.

ak2
источник
1

Это было исправлено в 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,

Jim Stewart
источник