2020-11-07追記
Win版の VS Code+VSCodeVim でノーマルモードに戻った時にIMEを半角英数入力にする
同じことをやってくれるシングルバイナリツールを作ってくれている人が居たのでこちらを採用することに。
今回の用途ではIME切り替えができるツールなら何でも良いので、高機能なAutohotKeyよりも単一機能のツールの方が起動が速いはず。
入力時のラグはストレスになるため、より軽い上記ツールの方がおすすめ。
背景
- VSCodeVimで日本語入力するとき、Escでインサートモードから抜けたときには日本語入力がオフになっていてほしい
- 公式Gitではim-selectを使った方法が紹介されているが、これはIMEの切り替えであって日本語入力オフではない
- 上記をなんとかするためあれこれやった
環境
OS: Windows10 Pro バージョン 1903
IME: Google IME
前提
IME設定とAutohotkeyが必要
IME設定で無変換をIMEオフに割り当てる
無変換を入力した場合にIMEがオフになる設定をする。
GoogleIMEを利用している場合は
「Google日本語入力 無変換 IMEオフ」とかで検索すれば設定方法がヒットするはず。
MS-IMEでも設定可能。
Autohotkeyで無変換を入力するだけのスクリプトを書く
最初にAutohotkeyというツールを公式サイトからダウンロードしてインストールする。
Autohotkeyは元々任意のキーマップを設定したりするためのツールだが、
スクリプトを単体で実行すると、単にキーを入力するだけの処理を実行できる。
これを利用して、無変換キーを入力するだけのスクリプトを作っておく。
名前は ImDisable.ahk とする。スクリプトの場所はどこでも良い。
Send,{vk1D}
VSCodeVim側の設定
- Ctrl + , で出てくる設定画面から、更に右上のボタンをクリックすることで設定ファイルであるsettings.jsonを開く。バージョンによってボタンのUIが変わっていたりするのでちょっと分かりにくい。
- settings.json に以下の記述を追加する
- Autohotkey.exe と IMDisable.ahk のパスは適宜自分が配置した場所を記述する
- defaultIMの設定内容は使わないので何でも良い。とりあえずjaにしてある。
- switchIMCmd にある {im} は引数としてAutohotkey.exeに渡されるが利用しない。ないとVScodeVim側でエラーが出るのでとりあえず入れてある
{
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "ja",
"vim.autoSwitchInputMethod.obtainIMCmd": "C:\\path\\to\\AutoHotkey.exe C:\\path\\to\\ImDisable.ahk",
"vim.autoSwitchInputMethod.switchIMCmd": "C:\\path\\to\\AutoHotkey.exe C:\\path\\to\\ImDisable.ahk {im}",
}
おわり
ここまでの設定が完了すれば、インサートモードから抜けるときに日本語入力がオフになる。
Esc で抜けようが Ctrl+[ で抜けようがちゃんとオフになってくれるので地味に便利。