LoginSignup
32
31

More than 5 years have passed since last update.

Vimからfcitxを使う

Last updated at Posted at 2014-08-13

近頃の 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
32
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
31