見出し画像

VisualStudio CodeのVimプラグインで挿入モード時に日本語入力モードが復活しないようにする方法

コード書いとる?

VisualStudio Code(以下VSCode)を本格的に使い始めて...約ひと月。

Vimプラグインもすこぶる調子いいです。

今回はこの拡張機能で唯一イラッとされられていたモード切り替え時の日本語入力モードの扱いについてメモ書き。ここはnote。

Vimプラグインでの日本語入力について

機能は申し分ないのですが、挿入モードで日本語を入力したのちノーマルモードに戻り、続いて何かしらコマンドを入力すると日本語が入力されて「ぐぎぎ...」ってなる...。ええ感じに日本語入力モードは解除してくれない...

これはもちろん公式に解消法が提示されていて、それに従えばノーマルモードに戻った時に日本語入力モードが解除されます。素晴らしい!

https://github.com/VSCodeVim/Vim#input-method

ところが...再び挿入モードにした時にご丁寧に日本語入力モードの状態も復元してくれる...。ぐぎぎ...そこまでは配慮しなくてええんやで...。

解消方法

公式のソースコードを眺めて対策を練る。VSCodeの拡張機能はTypeScriptで書けるのね。

https://github.com/VSCodeVim/Vim/blob/97f5e69a4ca170967e9077fcfa3683c499bef210/src/actions/plugins/imswitcher.ts

そして閃いたmacOSでの解消方法。Windowsでも似たような手法で解消できると思います。

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

vim.autoSwitchInputMethod.obtainIMCmdの設定を変更しています。

処理の流れは以下のような感じ。

1. 挿入モードからノーマルモードへ戻る時、obtainIMCmdを実行し入力モードを記憶。入力モードをdefaultIMへ変更。

2. 挿入モードへの切り替え時にはswitchIMCmdを実行し、記録しておいた入力モードへ変更。

1.でobtainIMCmdの実行結果が「ヌル文字列」だった場合、2.でdefaultIMに戻すような作りになっていました。それを利用して「挿入モードへ切り替えた入力モードが復活しない」挙動を実現できました。ざっとこんなもんよ!

スッキリ!

ではまた次回。

この記事が気に入ったらサポートをしてみませんか?