Windows上のVimとキーボードレイアウトの切り替え

UPD:これは、トピックの「履歴」バージョンです。 ここで問題の新しい解決策を参照してください。



Vimのロシア語レイアウトの問題は何度も提起されてきました。 ここで解決策の1つを見ることができますが、レイアウトを切り替えるための新しいホットキーに慣れることができます。 また、システムユーティリティを呼び出してレイアウトを変更する多くのソリューションがありますが、Windowsでそのようなユーティリティが見つからなかったため、自分で実装する必要がありました。



本質的に、WinAPI関数用のコンソールインターフェイスを取得しました。 ウィンドウの新しいレイアウトをインストールするために、プログラムはウィンドウのクラス名と2文字の言語コードを受け取ります。 そのようなウィンドウがあり、対応する言語コードが見つかった場合、プログラムはこのウィンドウにWM_INPUTLANGCHANGEREQUESTメッセージを送信します。



プログラムとVimの間に接続を作成するために、 Tech-Detailsブログのエントリを利用しました。 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.5 KB)を%PATHのどこかに置くことを忘れないでください(例:C:\ Windows \ System32) 。 必要な場合は、 64ビットバージョン (5 KB)があります。 ソースコード (6.8 KB)はLGPL2ライセンスの下で利用可能です。



利点:動作し、Vimウィンドウでのみレイアウトを切り替えます。

短所:システム関数がGVimから短時間呼び出されると、cmd.exeウィンドウが開き、GVimウィンドウが短時間フォーカスを失います。



UPD:

habrayuzerのアドバイスに基づいて、 ivnikは言語バージョンの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)
      
      







Gvimの.exeファイルがあるディレクトリに.dllファイルを配置します。 Vimビルドが64ビットの場合、適切なライブラリを使用します。




All Articles