Vimにおける日本語入力をサポートするための、類似したプラグインが2つあります。
-
imactivatemap
IMオンの状態でインサートモード(とパターン検索)に入れるマッピングを追加するというプラグインです。例えば、prefixキーが'g'の場合、'gi'と入力することで、iコマンドをIMオンの状態で始められるようになります。 -
im_control
インサートモード(とパターン検索)に入る際のIMオン/オフの設定を固定できるというプラグインです。
私は、これらのプラグインの良い所を組み合わせたようなものを作ろうとしました。
簡単に説明すると、IM設定を切り替える際に、それと逆の設定でインサートモード(とパターン検索)に入るマッピングを追加するというものです。
例えば、IMオフ設定の時に'gi'と入力するとIMオンで、IMオン設定の時に'gi'と入力するとIMオフでインサートモードに入るようにするということです。
こうすることで、例えば、プログラムなどの英語がメインのファイルを編集する時はIMオフ設定にし、たまにコメント文を日本語で入力する時などにIMオンのコマンドを使用する、という使い方が出来ると考えました。
しかし、実際に動かしてみると、検索コマンド('/'と'?')だけが上手く動きませんでした。
ソースコードは以下の通りです(vimrcとは別ファイルです)。
VimScript
1"デフォルトはIMオフ設定にする 2let g:isImFixOn = get(g:,'isImFixOn',v:false) 3 4command! -nargs=0 ImFixSwitch call <SID>imFixSwitch() 5fu! s:imFixSwitch() 6 let g:isImFixOn = !g:isImFixOn 7 call s:imSwitch(g:isImFixOn) 8 call s:imReverseMapSwitch(g:isImFixOn) 9endf 10 11fu! s:imSwitch(on) 12 let &imi = (a:on) ? 2 : 0 13 let &ims = (a:on) ? 2 : 0 14endfu 15 16fu! s:imiSwitchBy(on,cmd) 17 let &imi = (a:on) ? 2 : 0 18 return a:cmd 19endf 20 21fu! s:imsSwitchBy(on,cmd) 22 let &ims = (a:on) ? 2 : 0 23 return a:cmd 24endf 25 26"現在のIM設定と逆の動作をするコマンドのマッピングを行う 27fu! s:imReverseMapSwitch(on) 28 let l:prefix='g' 29 let l:imicmdlist = ['i','I','a','A', 30 \ 'o','O','s','S', 31 \ 'c','C','r','R', 32 \ 'f','F','t','T'] 33 let l:imscmdlist = ['/','?'] 34 35 for imicmd in l:imicmdlist 36 exe 'map <expr> <silent> '.l:prefix.imicmd.' <SID>imiSwitchBy('.!a:on.",'".imicmd."')" 37 endfor 38 "FIXME: こっちだけ動かない 39 for imscmd in l:imscmdlist 40 exe 'map <expr> <silent> '.l:prefix.imscmd.' <SID>imsSwitchBy('.!a:on.",'".imscmd."')" 41 endfor 42 43 "インサートモードから抜ける際、元の設定に戻すための自動コマンド 44 if a:on 45 aug recover_im_reverse 46 au! 47 au InsertLeave * call <SID>imSwitch(v:true) 48 aug END 49 else 50 aug recover_im_reverse 51 au! 52 au InsertLeave * call <SID>imSwitch(v:false) 53 aug END 54 endif 55endf 56"起動時にマッピングが登録されているようにする 57call s:imReverseMapSwitch(g:isImFixOn)
例えば、IMオフ設定で'g/'と入力してみると、コマンドラインの右端に'/'と表示され、次のキー入力を待機しているという状態で停止しました。この時カーソルは依然としてウィンドウ内にあり、IMはオンになっていました。そしてその状態で何らかの文字('ほげ'とします)を入力し、確定すると、'/ほげ'というように、その文字が検索パターンとしてコマンドラインに入力されました。
IMオン設定の場合も、これと同様の挙動になりました。
結果を見れば成功と言えなくもないですが、普段使いする以上、この謎の不具合を取り除いておきたいです。
この不具合の原因の究明へのご協力、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。