エディタのVimモードで、Escキーを押したときに日本語入力をオフにする設定(macOS, Windowsそれぞれの場合)

VimgVim、あるいは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>

で指定しているキーは、一つ目が置き換え対象となるキー(ここではEscやCtrl+[)、2つ目と3つ目が置き換え先のキーとなる。このように指定することで、もとのキー入力も横取りされずに、エディタ側でも拾うことができる。 なお、private.xmlの細かい文法はこちらに記載されている。

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