VSCode VimでInsertモードからNormalモードへ戻った時、WindowsのIMEをオフにする方法

VSCode VimでInsertモードからNormalモードへ戻った時、WindowsのIMEをオフにする方法

VSCode Vimでは、Insertモードで日本語を入力した後にNormalモードへ戻っても、IMEはオンのままです。
そのままhjklで移動しようとすれば、「っっ」みたいな入力がされてイラッとします。

im-selectの代わりにzenhanを使って解決する

(2019年12月20日 追記)
vscode-vimで推奨しているim-selectはキーボードの切り替えで、入力モードの切り替えは出来ないので使えません。(詳細は以下の元記事参照) IMEモードを変更するプログラムを既に作った人が公開されていたので紹介します。

zenhan

VSCode VimのGitHubを読む

まず頼るなら本家です。
公式のGitHubページを読みました。

すると、以下の見出しが目に入ります。

Input Method

Disable input method when exiting Insert Mode.
( 挿入モードを終了するときに入力方式を無効にします。 )

なんだ、あるじゃん。
と思ってやってみますが、これWindowsではダメなんです。
Macのユーザーであれば、ここの手順通りim-selectを導入していけばキレイに解決できます。

Windowsの日本語IMEって他言語とは違って、半角/全角キーで英数・日本語を切り替えることが出来ます。
これって本当は珍しい話で、通常は日本語IMEとUSキーボードの二種類をセットアップし、「Winキー+スペース」等でキー入力方式ごと切り替えて二種類の言語を対応するのは普通なんです。

そして、im-selectが出来るのはソレです。
決して、半角/全角キーで英数・日本語キーを切り替えられる訳ではありません。
入力方式を切り替えることが出来るだけなので、日本語入力方式の中で日本語入力か英数かなんて区別も出来ず、設定も出来ません。

Winキー+スペースでトグル方式で日本語・英語を切り替えるのが苦ではなければ、US言語キーボードを追加してim-selectを設定すれば恐らくWindowsでも設定可能です。
私は無変換(半角)、変換(全角)で入力方式を切り替えていて、押しにくいWinキー+スペースでトグル方式なんて嫌なので辞めました。

Vim本家のようにset iminsert=0を設定

set iminsert=0をセットするだけでIMEオフを実現できれば楽ですよねー…
VSCode Vimでは無理でした。

ですが、:setコマンドないんです…。
駄目でした。

IME側で解決する

VSCodeでは手が出ない領域じゃないかという気がしてきたので、見方を変えました。
IMEやGoogle日本語入力側でInsertモードを抜けるキー(Esc, Ctrl+[)に対してIMEオフのホットキーを割り当てることで、IME制御下でコントロール出来ないか試してみました。

結果、一応は機能するのですが問題が残ります。
Insertモードを抜けるキーを、二回押さなければいけないんです。

全角でInsertモード→Ctrl+[→半角に切り替わる(切り替わるだけで本来のCtrl+[は入力されていない)→もう一度Ctrl+[→Normalモードへ戻る

という流れで、全角モードの場合はInsertモードを抜けるキーを二回押す必要があります。
なんか連打するみたいで気が進みませんが、現時点ではこのぐらいの解決策しかないようでした。

また、同じ入力方式の中で入力言語が切り替わる言語は多くはないので、公式で優先的に対処してもらえる可能性は低いのではないかと思います。。

Vimカテゴリの最新記事