【Mac】VSCode Vimでim-selectの入力切替が不安定な場合の対策

【Mac】VSCode Vimでim-selectの入力切替が不安定な場合の対策

VSCode Vimの入力方法の切り替えに、日本人のほとんどはim-selectを使用していると思います。
私は元々Windows環境でVSCode Vimを使っていました。
WindowsではVSCode VimでInsertモードからNormalモードへ戻った時、WindowsのIMEをオフにする方法の記事にあるように一筋縄ではいきませんでした。
Macなら、さぞ簡単に設定できると思っていましたが、そんなに甘くありませんでした。

im-selectの設定は簡単にできる、しかし…

設定後、動作を確認してみると挿入モードからノーマルモードへ戻ると、入力方法は自動で英字に移行されました。
Windowsの苦労は何かと思ったのも束の間、時々、入力方法が英字にならないことに気がつきました。

画面右上の入力方法の表示は「A」となっていますが、実際は日本語入力になってしまっています。
挿入モードから抜けてjjjjと押すと、日本語入力状態のためカーソルは動かず行く当てのない入力文字が表示されます。

Mac標準のことえりで問題が起きたので、リアルタイム変換を切ったり、Google日本語入力に変えてみたりしましたが結果は変わりませんでした。

解決策は入力ソースを分けること

ことえりやGoogle日本語入力は、一つの入力ソース内で日本語入力・英字が切り替えられます。
詳細な理由までは確認していませんが、これが良くないようです。

im-selectは入力モードではなく入力ソースを切り替えることを意図しているのでしょうか。
日本語入力と英字で別々の入力ソースにすることでピタリと問題が解決しました。

設定手順

英字入力用の入力ソースを+から追加します。
次に、日本語の入力モードから英字のチェックを外します。

VSCodeのautoSwichiInputMethodの設定は以下のようになります。
(使用している入力ソースによって異なるため、自身の環境のターミナルからim-selectを実行して入力ソースを確認して下さい)

"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}",

小ネタ

InputMethodはノーマルモードへ移行する時に英字へ切り替え、再度挿入モードに切り替わったタイミングで以前の挿入モードの入力方法に戻す機能です。
そのため、日本語の状態でノーマルモードへ抜けた後に挿入モードへ切り替えると、日本語に戻されます。

プログラミングでは日本語はあまり入力しないため、日本語に戻さずに英字のままの方が好ましいです。
以下のようにobtainIMCmdの設定値を変更すれば、英字のままにすることができます。

im-selectは第1引数に渡された入力方法に切り替えるソフトのため、英字の入力方法を固定でセットできます。
少々乱暴なやり方ですが、公式でオプションなどが用意される気配もないので致し方ありません。。

"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select com.apple.keylayout.ABC",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}",

プログラミングカテゴリの最新記事