- PVSM.RU - https://www.pvsm.ru -
Проблема русской раскладки в Vim поднималась много раз. Одно из решений можно увидеть здесь [1], однако оно заставляет привыкать к новой горячей клавише для переключения раскладки. Также существует множество решений с вызовом системной утилиты для смены раскладки, но под Windows подобной утилиты не нашел, так что пришлось реализовать её самостоятельно.
По сути получился консольный интерфейс для WinAPI-функций. Для установки новой раскладки для окна программа получает имя класса данного окна и двухбуквенный код языка. Если есть такое окно и найден соответствующий языковой код, то программа сообщение WM_INPUTLANGCHANGEREQUEST данному окну.
Для создания связи программы с Vim'ом опирался на запись из блога Тех-Детали [2]. Чтобы переключение работало в Windows нужно в _vimrc добавить следующие строки:
fun! <SID>xkb_switch(mode)
let cur_layout = system('dxlsw.exe -get VIM')
if a:mode == 0
if cur_layout != 'en'
call system('dxlsw.exe -set VIM en')
endif
let b:xkb_layout = cur_layout
elseif a:mode == 1
if exists('b:xkb_layout') && b:xkb_layout != cur_layout
call system('dxlsw.exe -set VIM '.b:xkb_layout)
endif
endif
endfun
if executable('dxlsw.exe')
autocmd InsertEnter * call <SID>xkb_switch(1)
autocmd InsertLeave * call <SID>xkb_switch(0)
endif
Также не забудьте положить dxlsw.exe [3] (3.5 KB) куда-нибудь в %PATH, например, в C:WindowsSystem32. Если кому-нибудь нужно, то есть и 64х-битная версия [4] (5 KB). Исходный код [5] (6.8 KB) доступен под лицензией GPL2.
Преимущества: работает, переключает раскладку только в окне Vim'a.
Недостатки: при вызове функции system из GVim на краткий промежуток времени открывается окно cmd.exe и окно GVim'a ненадолго теряет фокус. Кто-нибудь знает, как исправить?
Автор: DeXPeriX
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vim/22534
Ссылки в тексте:
[1] здесь: http://habrahabr.ru/post/98393/
[2] Тех-Детали: http://lin-techdet.blogspot.com/2012/04/vim.html
[3] dxlsw.exe: http://download.dexp.in/dxlsw.exe
[4] 64х-битная версия: http://download.dexp.in/dxlsw64.exe
[5] Исходный код: http://download.dexp.in/dxlsw.c
[6] Источник: http://habrahabr.ru/post/162483/
Нажмите здесь для печати.