lyokha / vim-xkbswitch

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

g:XkbSwitchILayout and g:XkbSwitchNLayout #10

Closed abcdw closed 7 years ago

abcdw commented 11 years ago

При установке этих переменных одновременно работает, только первая из установленных. let g:XkbSwitchILayout = 'us(dvp)' let g:XkbSwitchNLayout = 'us(dvp)'

lyokha commented 11 years ago

Попробовал у себя et g:XkbSwitchILayout = 'de' let g:XkbSwitchNLayout = 'de' Работает правильно. Вполне возможно, что я не понял, что у вас за проблема, опишите ее более развернуто

abcdw commented 11 years ago
let g:XkbSwitchIMappingsSkipFt = ['tex']
let g:XkbSwitchEnabled = 1
"let g:XkbSwitchLib = '~/.vim/bundle/vim-xkbswitch/xkb-switch/libxkbswitch.so'
let g:XkbSwitchIMappings = ['ru']
let g:XkbSwitchNLayout = 'us(dvp)'
let g:XkbSwitchILayout = 'us(dvp)'

Пишу в инсерт моде текст на русском, выхожу в нормал мод расскладка меняется на us(dvp), перехожу в инсерт мод и расскладка меняется на ru(typewriter). Если поменять последние строчки местами, то наоборот "запоминается" расскладка в нормал моде, а расскладка в инсерт моде всегда по-умолчанию us(dvp). Хотелось бы чтобы при переходе в любой режим расскладка менялась на us(dvp).

lyokha commented 11 years ago

Пишу в инсерт моде текст на русском, выхожу в нормал мод расскладка меняется на us(dvp), перехожу в инсерт мод и расскладка меняется на ru(typewriter).

Раскладка, которая была в режиме ввода возвращается, когда вы снова переходите в режим ввода - в этом смысл плагина. Так что я здесь не вижу никакого противоречия.

Если поменять последние строчки местами, то наоборот "запоминается" расскладка в нормал моде, а расскладка в инсерт моде всегда по-умолчанию us(dvp).

Я вообще не представляю, как порядок объявления глобальных переменных может влиять на поведение плагина.

Вот описание поведения плагина при установке этих переменных из документации:

5.2 Default layouts~

By default last Normal mode keyboard layout is restored when leaving Insert mode, but you can specify to use particular layout for that:

let g:XkbSwitchNLayout = 'us'

< Also you can specify original Insert mode keyboard layout:

let g:XkbSwitchILayout = 'us'

<

Из него следует, что смысл этих переменных различен, в частности g:XkbSwitchNLayout определяет безусловное изменение раскладки при выходе из режима ввода (т.е. Вы всегда получите us(dvp) при выходе в нормальный режим), переменная g:XkbSwitchILayout устанавливает язык по умолчанию, который включится при первом входе в режим ввода в данном буфере, если в процессе редактирования вы поменяли раскладку (например, на русский язык), то при повторном входе в режим ввода язык переключится на русский - это by design!

Хотелось бы чтобы при переходе в любой режим расскладка менялась на us(dvp)

Такой фичи нет, и если честно, я не понимаю, зачем она нужна, ведь если рассматривать режим ввода как непрерывный поток редактирования, то странно, что при врЕменных прерываниях его выходом в нормальный режим vim, текущая раскладка ввода будет каждый раз восстанавливаться, несмотря на то, что она была сознательно изменена раньше.

Если вам действительно нужна такая фича, то я могу подумать, как ее реализовать, хотя это нарушает главную идею плагина.

lyokha commented 8 years ago

Все-таки я добавил безусловную раскладку в Insert mode как фикс для проблемы #24. Оказывается, эта фича востребована! Смотрите обновление секции Default layouts в README.