エディタのVimモードで、Escキーを押したときに日本語入力をオフにする設定(macOS, Windowsそれぞれの場合)
VimやgVim、あるいはAtomやVS Codeなどの、Vimバインドモードを利用できるエディタで日本語を扱う際に、問題となるのが日本語入力モードの切り替えだ。デフォルトだと、日本語入力モードでEscやCtrl+[を押してノーマルモードに抜けた際に、日本語入力状態のままとなってしまい、コマンド操作ができなくなってしまう。
そこで、
- Vim、またはAtomやらVS CodeやらVisual StudioなどのVimバインドモードを利用できるエディタを使っている際には
- EscまたはCtrl+[を押下した際に
- 日本語入力をOFFにする
ように設定を行う。
macOSの場合
Karabinerを使って、キーの置き換えを行う。(※リンク先にも記載されているが、現時点で最新のmacOS Sierraでは動作しないので注意)
Preferenceからprivate.xmlを開き、以下のとおり記述して保存。xmlをリロードすれば完了。 対象となるアプリケーションの定義は、適宜追加・削除すること。
<?xml version="1.0"?> <root> <appdef> <appname>iTERM2</appname> <equal>com.googlecode.iterm2</equal> </appdef> <appdef> <appname>MACVIM</appname> <equal>org.vim.MacVim</equal> </appdef> <appdef> <appname>Sublime3</appname> <equal>com.sublimetext.3</equal> </appdef> <appdef> <appname>AndroidStudio</appname> <equal>com.google.android.studio</equal> </appdef> <appdef> <appname>Atom</appname> <equal>com.github.atom</equal> </appdef> <appdef> <appname>Xcode</appname> <equal>com.apple.dt.Xcode</equal> </appdef> <appdef> <appname>RubyMine</appname> <equal>com.jetbrains.rubymine</equal> </appdef> <appdef> <appname>VSCode</appname> <equal>com.microsoft.VSCode</equal> </appdef> <list> <item> <name>Leave Insert Mode with EISUU (vim keybind apps)</name> <identifier>private.vim_keybind_apps_esc_with_eisuu</identifier> <only>iTERM2,TERMINAL,MACVIM,Sublime3,AndroidStudio,Atom,Xcode,RubyMine,VSCode</only> <autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen> <autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, VK_CONTROL, KeyCode::BRACKET_LEFT, VK_CONTROL, KeyCode::JIS_EISUU</autogen> </item> </list> </root>
Windowsの場合
AutoHotKeyを使う。
まず準備として、無変換キーを押した際に、IMEの英数モードではなく、IMEがオフになるように設定しておく。 Google日本語入力であれば、プロパティ画面から、キー設定の選択 > 編集 でキーバインドの設定を開き、「入力文字なし - Muhenkan」のコマンドを「キャンセル後IMEを無効化」に設定する。
その上で以下のスクリプトを作成し、"Vim_Mode.ahk"などの名前で保存して、起動時に実行するようにしておく。
Windows10の場合、スタートアップディレクトリはC:\Users\自分のユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
となる。
なお、AutoHotKeyでも、キー置換の対象となるアプリケーションを指定することもできるが、ここでは割愛する。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. $Esc:: Send,{Esc} Sleep 1 Send,{sc07B} Return $^[:: Send,{^[} Sleep 1 Send,{sc07B} Return