lyokha / vim-xkbswitch

vim plugin for automatic keyboard layout switching in insert mode
MIT License
481 stars 23 forks source link

В некоторых типах файлов слетают русские буквы Ж,Б,Ю #33

Open z-hunter opened 7 years ago

z-hunter commented 7 years ago

Проблема выявлена на типах файлов .md и .txt.

Сценарии: 1 Создал новый файл -- буквы на месте. Сохранил как a.txt -- буквы на месте. Выхожу из vim, снова захожу в vim, открываю a.txt -- теперь нельзя вводить буквы "ж", "б" и "ю" на любых регистрах, вместо них символы из английской раскладки.

  1. Создал новый файл, Сохранил как a.cpp. Вышел-зашёл в vim, открыл этот файл -- все буквы вводятся нормально.

Если удалить данный плагин, или dll которую он использует, то описанного не наблюдается.

z-hunter commented 7 years ago

Вылечилось добавлением в vimrc:

let g:XkbSwitchSkipIMappings =
        \ {'*'   : ['.', '>', ':', ';', ',', '{<CR>', '/*', '/*<CR>'],}

Наверное надо в какой-то FAQ занести, можно issue закрывать.

lyokha commented 7 years ago

Добрый день, не смог ответить вчера. Вы все правильно настроили, но проблема совсем не в библиотеке как таковой, а в том, что плагин переводит маппинги инсерт-мода, чтобы пользователь мог пользоваться ими, не переключая раскладку. Ваш C++ плагин настраивает Insert-mapping для символов . и : - проверьте это введя imap . и :imap: - это будет какой-нибудь omnicompletion - после ввода этих символов vim предложит варианты - методы и нэймспейсы. Проблема в том, что символы соответствующей раскладки для русского языка (ю и ж) переводятся в вызовы этих же функций, и vim пытается вызвать omnicompetion, скорее всего безуспешно.

Выход - запретить трансляцию IMappings вообще или настроить ее специальным образом, как вы и сделали.

Документация такой проблемы уже есть в README и довольно хорошая - начинается со слов Be very careful with mapping duplicates! и заканчивается в конце секции, там кстати приведен пример c настройкой g:XkbSwitchSkipIMappings, который я использую сам и который очень похож на ваш.

z-hunter commented 7 years ago

Спасибо. Я как раз ту часть документации не очень внимательно читал, поскольку рассудил так "я не маплю никаких дубликатов, и вообще ничего не маплю, значит тут ничего интересно нет". Вообще как по мне, лучше бы трансляцию эту по умолчанию выключили, а в мануале написали как включить если кому-то нужно. Но это субъективно моё мнение, не претендующее на правоту.

lyokha commented 7 years ago

Я добавил описание проблемы в секцию Troubleshooting со ссылкой на основную документацию.

Трансляция по умолчанию выключена: она включается командой let g:XkbSwitchIMappings = ['ru']. Если вы ее удалите, то проблема исчезнет, однако лучше оставить эту настройку и добавлять плохие символы в g:XkbSwitchSkipIMappings для конкретных filetype при выявлении проблем.