近頃の ibus や uim の使い勝手がイマイチなこともあり、Linux 上での Input Method として fcitx が最近ポピュラーになってきました。
我らが SKK では、その他のInput Methodと違い、SKK内に直接入力モードがあり、SKKのままアルファベット入力が可能なため、一時期のUbuntu で発生したような ibus の不具合をほとんど受けることがなく、実はあまり fcitx に乗り換える必要もありません。
ともあれ、fcitxを使うとなった場合に、Linuxで問題となるのは、Input Mode⇔Normal Mode間で、ひらがなモードの有効/無効が自動的に切り替えられない事です。
日本語で文章を書いていて、SKKを直接入力モードに変更しないまま、<ESC>
でInsert Modeを抜けて体裁を整えたり、編集をしようとした場合に、Normal Modeでもひらがな入力が有効のままになっていてムキー、というのはよくある光景です。
Vimから fcitx の On/Off を切り替える場合、FcitxでVimからIM制御するが有名かと思います。
このプラグインでは、Vimのpythonインタフェースを利用してOn/Offを実行していますが、fcitxにはfcitx-remote
というコマンドがあるようなので、それを利用してOn/Off切り替えが実現できます。
set iminsert=2
set imsearch=2
set imcmdline
set imactivatefunc=ImActivate
function! ImActivate(active)
if a:active
call system('fcitx-remote -o')
else
call system('fcitx-remote -c')
endif
endfunction
set imstatusfunc=ImStatus
function! ImStatus()
return system('fcitx-remote')[0] is# '2'
endfunction
このようにすることで、入力開始時には fcitx-remote -o
により fcitx を有効化し、入力終了時には fcitx-remote -c
でfcitxを無効にできるようです。
ちなみに、Vimで入力時にIMの制御が必要となる場面というと、以下のようなものがあります。
- Insert Mode … バッファへの文章の挿入
- Cmdline (':') Mode … Ex コマンドの実行
- Cmdline ('/' or '?') Mode …
/
や?
での検索文字の入力
今回の imactivatefunc
を利用する方法を使えば、それぞれの場面での設定を、以下のオプションを設定することで制御できるようになるため、便利です。
iminsert
imcmdline
imsearch
紹介した設定例では、それぞれのパターンでIMを有効にするように設定しました。
SKKなどの、IM有効時の初期入力モードを設定できるIMでは、直接入力
を初期設定としておくと、上記のVimの設定においても、通常は半角英数入力で、必要時のみ<C-j>
で日本語入力することができ、また、Normal Modeに戻った時にも影響がなく、とても便利です。
ちなみに、Windowsでは、こんなしち面倒くさいことをせず、ただSKK日本語入力FEPを使うだけでInsert Mode⇔Normal Modeの切り替え時に自動的に直接入力モードへ変更してくれるので、以下の設定だけしておけばよいです。
set iminsert=0
set imsearch=0