確認環境
PC | Thinkpad X1 Carbon 2nd Gen |
OS | FreeBSD 12.0-RELEASE-p5 |
CLI IME | uim-fep version 1.8.8 / Mozc-2.23.2815.102+24.2.oss |
GUI IME | fcitx version: 4.2.9.5 / Mozc-2.23.2815.102+24.2.oss |
課題
vim
と日本語入力の相性は良くない。
例えば、vim
の挿入モードで日本語入力を行った後、Escキー
でノーマルモードに遷移する。
そしてカーソルを動かそうとして、Jキー
を押す。
するとどうだろう。
カーソルは下には動かず、j
という全角文字が画面に表示される。。。
違う違う、そうじゃない!
ノーマルモードで日本語入力なんてしないよ。
僕はただ、カーソルを動かしたいだけなんだ。。。
対策
このvim史上最もストレスのたまる問題は、ノーマルモード遷移時に、uim-fep
の日本語入力モード(以降、IM)を自動でOFFすることで解消できる。
uim-fep
には、外部から入力モードを制御するためのファイルが用意されている。
それを利用すればいい。
ここでは、uim-fep
の入力モードを制御するシェルスクリプトを作成し、それをvim
のノーマルモード遷移時に呼び出して対応する。
uim-fep
の入力モードをコマンドラインから制御する方法- シェルスクリプト化する
vim
の設定- おまけ) fcitx追加版
1. uim-fep
の入力モードをコマンドラインから制御する方法
uim-fep
が起動したコンソールで、下記のコマンドを実行してみよう。
> echo 1 > "$UIM_FEP_SETMODE" # IM ON > echo 0 > "$UIM_FEP_SETMODE" # IM OFF
$UIM_FEP_SETMODE
は、uim-fep
が起動したときに作成される環境変数。
IMをON/OFF制御するファイルへのパスが入っている。
このファイルに1
を書き込めば、IM ON となる。
このファイルに0
を書き込めば、IM OFF となる。
実に簡単。
このファイル名の末尾にはプロセスIDがつくので、uim-fep
を複数のシェルで同時に立ち上げても問題ない。
2. シェルスクリプト化する
uim-fep
の制御方法がわかったところで、vim
から制御するためのシェルスクリプトを用意しよう。
僕が用意したのは、下記コード。
このスクリプトは、下記のような動作をする。
- 引数に
1
を渡せば、IM ON する - 引数に
1
以外を渡せば、IM OFF する $UIM_SET_FILE
のファイルが書込不可の場合は、何もせずに終了する
このシェルスクリプトをvim
から呼び出せるように、パスが通ったディレクトリ(1)に保存して、実行権限を追加(chmod +x
)しておこう。
1 ... 参考) パスを通す
3. vim
の設定
次に、vim
の設定ファイル(~/.vimrc
)に下記を追記しよう。
(neovim
の設定ファイルは、~/.config/nvim/init.vim
)
" IM OFF command command! ImeOff silent !imectrl 0 " When in insert mode augroup InsertHook autocmd! autocmd InsertLeave * ImeOff augroup END
この例では、手順2で作成したシェルスクリプトをimectrl
という名前で保存した例。
2行目のimectrl
は、各自保存したファイル名に置き換えて欲しい。
これで、ノーマルモード遷移時に、作成したシェルスクリプトが呼ばれるようになる。
4. おまけ) fcitx追加版
もし、Xウィウンド上のIMとしてfcitx
を使っているのなら、uim-fep
との併用は、下記のようなシェルスクリプトになると思う。
シェルスクリプト側で、呼び出されているのが仮想コンソールかXウィンドウかの判定を行っているので、vim
の設定ファイルは修正不要。
その判定には、$XMODIFIERS
という環境変数で行っている。
この環境変数は、~/.xinitr
などで下記のようにセットしていると思う。
export XMODIFIERS=@im=fcitx
つまり、Xウィンドウが立ち上がったときだけ、この環境変数がセットされているはずだ、という想定。
もし、もっと良さげな判定方法をご存知でしたら、コメント頂けると助かります。
最後に
ひとまずこれで、仮想コンソール上でもXウィンドウ上でも、vim
のノーマルモード遷移時に、日本語入力をOFFすることができるようになった。
これなら、vim
で日本語を扱うのも悪くないのではないだろうか。
下記ページを読む限り、先人達もvim
と日本語入力の相性の悪さには苦労してきたようだ。
あきらめずに長年整備してきて頂いていることに、心から感謝したい。
ちなみに、挿入モード遷移時に日本語入力を賢くONしたいという人は、こちらの記事もご覧下さいましまし。
参考
以上。