рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдХреАрдмреЛрд░реНрдб рд▓реЗрдЖрдЙрдЯ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

UPD: рдпрд╣ рд╡рд┐рд╖рдп рдХрд╛ "рдРрддрд┐рд╣рд╛рд╕рд┐рдХ" рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ ред

рд╡рд┐рдо рдореЗрдВ рд░реВрд╕реА рд▓реЗрдЖрдЙрдЯ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЖрдкрдХреЛ рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рдЧрд░реНрдо рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдорд╛рдзрд╛рди рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдРрд╕реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЦреБрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдореЗрдВ WinAPI рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрд╕реЛрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓рд╛ред рдПрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд▓реЗрдЖрдЙрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╡рд░реНрдЧ рдирд╛рдо рдФрд░ рджреЛ-рдЕрдХреНрд╖рд░ рднрд╛рд╖рд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдВрдбреЛ рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рд╡рд┐рдВрдбреЛ рдкрд░ WM_INPUTLANGCHANGEREQUEST рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рд╡рд┐рдо рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЯреЗрдХ-рдбрд┐рдЯреЗрд▓реНрд╕ рдмреНрд▓реЙрдЧ рд╕реЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ред 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 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ % PATH рдореЗрдВ рдХрд╣реАрдВ рднреА dxlsw.exe (3.5 KB) рдбрд╛рд▓рдирд╛ рди рднреВрд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C: \ Windows 's System32 рдореЗрдВ ред рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ 64-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг (5 KB) рд╣реИред рд╕реЛрд░реНрд╕ рдХреЛрдб (6.8 KB) LGPL2 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЙрдкрд▓рдмреНрдз рд╣реИред

рд▓рд╛рдн: рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдЖрдЙрдЯ рдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рдо рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред
рдиреБрдХрд╕рд╛рди: рдЬрдм GVim рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ cmd.exe рд╡рд┐рдВрдбреЛ рдЦреБрд▓рддреА рд╣реИ рдФрд░ GVim рд╡рд┐рдВрдбреЛ рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рдлреЛрдХрд╕ рдЦреЛ рджреЗрддреА рд╣реИред

рдпреБрдкреАрдбреА:
рд╣рдмреНрд░рд╛рдпреБрдЬрд╝рд░ рдХреА рд╕рд▓рд╛рд╣ рдкрд░, рдЗрд╡рдиреАрдХ рдиреЗ рднрд╛рд╖рд╛ рд╕реНрд╡рд┐рдЪ рдХреЗ рдПрдХ DLL рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ред Cmd рд╡рд┐рдВрдбреЛ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреЛрдИ рдмреНрд░реЗрдХ рдирд╣реАрдВ рд╣реИрдВред

_vrc рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 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 рдлрд╝рд╛рдЗрд▓ рдХреЛ Gvim рдХреА .exe рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВред рдпрджрд┐ рд╡рд┐рдо рдмрд┐рд▓реНрдб 64-рдмрд┐рдЯ рд╣реИ, рддреЛ рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In162483/


All Articles