私は、Ubuntu 16.04 (をカスタマイズしたLin4Neuro 16.04)でfcitx+mozcで日本語入力を行っています。
エディタはvimを利用しています。
多くの方がネットに記載されていますので、詳細は書きませんが、私がvimで日本語文書を書くとき、
- 日本語で入力している時、入力が終わった後、ESCキーを押しても日本語入力の状態のままなので、一度mozcを切ってからでないと、ノーマルモードになれない。
という問題がありました。
この点に関して、私がよく参考にさせていただいている「いくやの斬鉄日記」にまさにこれに関する記事があり、中国語ですが、この問題を解決する .vimrc に記載する設定のリンクが紹介されていました。
早速、以下を ~/.vimrc に記載しました。(中国語のコメントは、英語に変換してあります)
"##### auto fcitx ###########
let g:input_toggle = 1
function! Fcitx2en()
let s:input_status = system("fcitx-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx-remote -c")
endif
endfunction
function! Fcitx2zh()
let s:input_status = system("fcitx-remote")
if s:input_status != 2 && g:input_toggle == 1
let l:a = system("fcitx-remote -o")
let g:input_toggle = 0
endif
endfunction
set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"Enter Insert mode
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
これでvimを起動したところ、日本語でいろいろ書いた後に、ESCを押してノーマルモードに戻ると、自動でmozcがoffになりました。やった!という感じです。
しかし、もう少し使っていて、不便に感じることがありました。それは、vimを起動して最初の挿入モードになるときに必ず mozc が立ち上がってしまうことです。日本語の文章を書くときはいいのですが、スクリプトを書くときは邪魔になります。ここは自動じゃないほうがいいなと思いました。
で、上の記載をよくよく見ると
Fcitx2en() というファンクションと
Fcitx2zh() というファンクションがあり、
前者はESCが押された時に自動でinput method (IM)をoffにする機能であり
後者は挿入モードになった時に自動でIMをonにする機能のようです。
私は後者の機能がいらないんだと気づきました。
なので、以下のように、Fcitx2zh()のところを削除しました。
"##### auto fcitx ###########
let g:input_toggle = 1
function! Fcitx2en()
let s:input_status = system("fcitx-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx-remote -c")
endif
endfunction
set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"##### auto fcitx end ######
こうしたところ、私の期待していたように
- vimでノーマルモード→挿入モードになった時にはIMは起動しない
- 必要時に手動でIMを起動
- ESCを押すと自動でIMをoff
となりました。
これでvimがさらに便利になりました。
自分の備忘録として記載しておきます。