はじめに
vimキーバインドを利用するアプリケーションでは、エディットモード中に日本語入力を行った場合、
Escしても日本語入力モードのままの状態になりすぐにコマンドモードが利用できない。
その都度英数入力に切り替える必要のないように、特定アプリケーションのみEscを押下した際に、日本語入力がOFFになるように設定を行う。
設定にはキーバインドをカスタマイズするアプリKarabinerを利用する。
Karabinerの設定
実現したい動作
Escキーが押下されると、日本語入力をOFFにしつつ(英数キーを押下した挙動)、エディットモードから抜ける(Escキーを単体で押下した挙動)為の動作を定義する。
設定箇所
Karabinerには様々な挙動がデフォルトで用意されているが、独自の定義を行うためには個別にxmlで定義を行う必要がある。
この個別の設定はprivate.xmlファイルとして行う。private.xmlは以下で指定して読み込む。
Preference > Misc&Uninstall > Open private.xml
private.xmlの設定
例としてターミナルアプリ(Mac標準TerminalやiTermなど)MarkdownエディタのBoostnoteを対象として設定する。
<?xml version="1.0"?>
<root>
<appdef>
<appname>BOOSTNOTE</appname>
<equal>com.maisin.boost</equal>
</appdef>
<item>
<name>Escape to EISUU+Escape only terminal</name>
<identifier>private.remap.jis_escape2eisuuAndEscape_terminal</identifier>
<only>TERMINAL, BOOSTNOTE</only>
<autogen>
--KeyOverlaidModifier--
KeyCode::ESCAPE,
KeyCode::JIS_EISUU,
KeyCode::ESCAPE
</autogen>
</item>
</root>
設定のポイントは以下の3つ
- 適用するアプリケーション名(アプリケーション群のまとまり)の定義
- 適用するアプリケーション名の指定
- 動作の定義
1. 適用するアプリケーション名(アプリケーション群のまとまり)の定義
アプリケーション名は <appdef>
タグで定義する。<appname>
タグにアプリケーション名、 <equal>
タグにアプリののBundle Identifierを指定する。
複数のBundle Identifireを指定する場合は <equal>
タグを複数追記する。
Bundle Identifierの確認方法は以下を参照する。
http://harafuji0613.hatenablog.com/entry/2015/03/22/002953
該当のアプリケーションに対応するものがあれば、プリセットのアプリケーション名を利用できる。
プリセットのアプリケーション名は以下を参照。
https://github.com/tekezo/Karabiner/blob/version_10.22.0/src/core/server/Resources/appdef.xml
設定例においてターミナルアプリ(TERMINAL)をアプリケーション名として定義(<appdef>
タグ内の設定)してないのはプリセットにリソース名が登録済みであるため。
参考までにTERMINALのプリセット定義は以下の通り。
<appdef>
<appname>TERMINAL</appname>
<equal>com.apple.Terminal</equal>
<equal>iTerm</equal>
<equal>net.sourceforge.iTerm</equal>
<equal>com.googlecode.iterm2</equal>
<equal>co.zeit.hyperterm</equal>
<equal>co.zeit.hyper</equal>
</appdef>
2. 適用するアプリケーション名の指定
<only>
タグに適用したいアプリケーション名を指定する。
ここで述べるアプリケーション名は単一のアプリケーションではなく、カテゴライズした複数のアプリの総称として利用する。
3. 動作の定義
<autogen>
タグの中にあるKeyCodeは上から、
- 挙動変更するキー
- 挙動変更した後のキー
- 追加したい挙動のキー
を定義する。
補足
<name>
タグで設定に名前をつける。Preference上ではこの名前で設定を確認できる。<identifier>
タグで設定に固有のIDをつける。システム内でユニークになるような命名規則を自分で考える。
参考
https://pqrs.org/osx/karabiner/xml.html.ja#prepared-appdef
https://pqrs.org/osx/karabiner/xml.html.ja#syntax-__KeyOverlaidModifier__