Ubuntuでibus 1.5が入ってるよ(sudo apt-get install ibus-mozcしたよ)というごく普通の環境を想定します.
普通はIMEを切り替えるには半角/全角キーを押したり,Alt + ` を押したりします.
これをコンソールから実行してやることが出来ます.
ibus engine 'mozc-jp' # 日本語入力に切り替え
ibus engine 'xkb:us::eng' # 英語配列の英語入力に切り替え
ibusコマンドの2つ目の引数に指定するべき値は,
ibus list-engine
で調べることが出来ます.
こんなことして何が嬉しいのかというと,Vimでインサートモードから抜けてノーマルモードに戻った時に,勝手に日本語入力をオフにしてて欲しいというのが実現出来るのです.mozc側の設定でEsc押したらIMEをオフにするってのもあるみたいなんですが,どうもそっちが上手く行かなかったので今はとりあえず自分はこのようなアプローチを取ることにしました.
ちなみにそのための.vimrcの設定は以下の通りです.
call system('type ibus')
if v:shell_error == 0
inoremap <Esc> <Esc>:call system('ibus engine "xkb:us::eng"')<CR>
endif
まずtype ibusを実行してibusコマンドの有無を確かめます.
なければv:shell_errorが 0 以外に,あれば 0 になっているはずなのでそれで条件分岐してinoremapで<Esc>を<Esc>:call system('ibus engine "xkb:us::eng"')<CR>に変えてやる感じです.
これもうちょっと頑張れば,IMEの状態を覚えさせておいて,再度インサートモードに入った時にIMEの状態を復元する,とか出来るはずなんですよね.事実そういうのを出来るようにしてるブログのエントリとかをこれ調べてるときに見かけました.
References
ここを参考にしながら,
-
IMCtrlって関数便利やなこれ -
<Esc>を<Esc>:call IMCtrl(...)<CR>にしてやったらええんちゃうか? -
xvkbdとかxdotoolとかせんでも直接iBus制御する方法あるんちゃうか? -
IMCtrl経由せずにsystem('ibus engine ...')って直接呼んでやったらええんちゃうか?
と紆余曲折をここ数日してました.