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

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

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

решение1

PuTTY отправляет события мыши с помощью протокола xterm, который появился еще в 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.

Связанный контент