macOS Sierraでvimで Ctrl-[ でコマンドモードに抜けるときにIMEを無効化する処理をHammerspoonを使って設定してみました。

Hammerspoon

HammerspoonはmacOSに関する様々な処理を自動化するツールで以下のような機能を持っています。

  • キーリマップ
  • アラート、通知の表示
  • ウィンドウ操作(移動、リサイズ)
  • ファイル変更の監視
  • アプリケーションイベントの監視
  • USB、Wifiイベントの監視
  • AppleScriptの起動
  • luaスクリプトで設定

 

キーリマップに関する設定は以下のリンク先が詳しいです。

Ctrl-[でIMEを無効化しつつコマンドモードに戻る設定

Ctrl-[でIMEを無効化したい場合は ~/.hammerspoon/init.lua を以下のように設定します

下のcmd + alt + ctrl + Rの設定はしなくてもOK。Hammerspoonをいじってるとき、メニューバーからConfig Reloadするのが面倒だったのでショートカットキーに登録しています。

remapKey({ ‘ctrl’ }, ‘]’ … 部分でCtrl-[ のキー登録をしています。

なぜ ‘]’ で登録しているかというと、HammerspoonのキーマップはUSキーボードの配列で判定されているらしく、JISキーボードの ‘[‘ はUSキーボードでは ‘]’ になるためです。

ctrl + shift + ;は半角英数に切り替えるGoogle IMEのショートカットキーになります。

ちなみにEscapeもこの方法でやろうとするとescapeのショートカットキーがescapeを呼び出す無限ループになるので、Google IMEなどの方法でIMEを無効化するのが良いっぽいです。

他のツールで試してみた

一般的にはKarabiner、Google IMEの設定、KeyhacでIMEを無効化できるっぽいのですが以下の理由でダメでした。

  • Karabiner
    => macOS Sierra未対応。Sierraで使う場合はKarabiner-elementsを使うらしい
  • Karabiner-Elements
    => 複数キーに対応していないのとIMEを無効化する方法がよくわからず…。
  • Google IMEの設定で何とかする
    => Escapeはキー設定追加でうまくいったが、Ctrl-[はうまくいかず
  • Keyhac
    => Command + Spaceで設定していたSpotlightが効かなくなったりして、うまくいかず

参考URL