УПД: Это «историческая» версия темы.
Новое решение проблемы с часами Здесь .
Проблема русской раскладки в Vim поднималась неоднократно.
Одно из решений можно увидеть Здесь Однако требуется некоторое привыкание к новой горячей клавише для переключения раскладки.
Также существует множество решений, предполагающих вызов системной утилиты для изменения раскладки, но под Windows мне не удалось найти такую утилиту, поэтому пришлось реализовывать ее самостоятельно.
По сути, это оказался консольный интерфейс для функций WinAPI. Чтобы задать новую раскладку окна, программа получает имя класса окна и двухбуквенный код языка.
Если такое окно есть и соответствующий код языка найден, то программа отправляет в это окно сообщение WM_INPUTLANGCHANGEREQUEST. Для создания связи между программой и Vim я опирался на запись в блоге Технические детали .
Чтобы переключение работало в Windows, нужно добавить в _vimrc следующие строки:
Также не забудьте поставить dxlsw.exe (3,5 КБ) где-то %ПУТЬ , например, в C:\Windows\System32 .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
Если кому-то понадобится, есть 64-битная версия (5 КБ).
Источник (6,8 КБ) доступен по лицензии LGPL2. Достоинства: работает, переключает раскладку только в окне Vim. Недостатки: при вызове системной функции из GVim на короткое время открывается окно cmd.exe и окно GVim ненадолго теряет фокус.
УПД: По совету Хаброузера ивник Я создал DLL-версию переключателя языка.
Окно cmd не появляется, тормозов нет.
_vimrc изменен на: fun! <SID>lib_kb_switch(mode)
let cur_layout = libcallnr('libdxlsw', 'dxGetLayout', 0)
if a:mode == 0
if cur_layout != 1033
call libcallnr('libdxlsw', 'dxSetLayout', 1033)
endif
let b:lib_kb_layout = cur_layout
elseif a:mode == 1
if exists('b:lib_kb_layout') && b:lib_kb_layout != cur_layout
call libcallnr('libdxlsw', 'dxSetLayout', b:lib_kb_layout)
endif
endif
endfun
autocmd InsertEnter * call <SID>lib_kb_switch(1)
autocmd InsertLeave * call <SID>lib_kb_switch(0)
Поместите файл DLL в каталог с EXE-файлом Gvim. Если сборка Vim 64-битная, используйте соответствующую библиотеку.
32-битная DLL: libdxlsw.dll , зеркало (3 КБ) 64-битная DLL: libdxlsw64.dll , зеркало (3,5 КБ) Код: libdxlsw.c , пастабина (1,9 КБ) Теги: #vim #Windows #Русская #раскладка клавиатуры #vim
-
Нгинкс. Этапы Обработки Запроса. Упражняться
19 Oct, 24 -
Hr И Разработчик Суржик
19 Oct, 24 -
Несколько Слов О Косс Порта Про
19 Oct, 24 -
День Единства В Минске
19 Oct, 24