Karabinerをカスタマイズしてアプリケーションごとにキーボードの挙動を変えよう
エディタを色々使っていると、そのソフトごとにキーイベントを変更したいときがあります。
.vimrcやinit.el、その他ソフトの環境設定でできることもありますが、エディタ内の設定だけでは難しい処理もKarabinerを使えばうまくいく場合があります。
今回は特に下記を実現させてみました。
- 端末上のVimでCtrl+Cを押すとエスケープ後自動で英数入力に切り替える(ノーマルモードに戻ったとき、すぐコマンドを使いたい!)
- 端末上のEmacsでCtrl+Gを押すとエスケープ後自動で英数入力に切り替える
- VSCodeでCtrl+Cを押すとコマンドパレットなども閉じたい(マルチカーソルの解除等もしたい)
- [追記] VSCodeでコマンドパレットなどでもC-n/C-pで選択、C-mで確定機能を追加しました!
※ 本記事のKarabinerは現行最新バージョンの10.18.0を使用しています
設定方法
はじめに設定方法を記載し、特筆事項は後述します。
private.xmlの設定
private.xmlを/Users/[ユーザー名]/Library/Application Support/Karabiner/
以下に保存します
<?xml version="1.0"?><root><appdef><appname>TERMINAL</appname><equal>com.apple.Terminal</equal></appdef><appdef><appname>ITERM2</appname><equal>com.googlecode.iterm2</equal></appdef><appdef><appname>PYCHARM</appname><equal>com.jetbrains.pycharm</equal></appdef><appdef><appname>VSCODE</appname><equal>com.microsoft.VSCode</equal></appdef><windownamedef><name>VIM</name><regex>.*vim.*</regex></windownamedef><windownamedef><name>EMACS</name><regex>.*emacsclient.*</regex></windownamedef><item><name>Private Mapping</name><!-- vim --><item><name>Custom Vim Change CONTROL_C+EISUU</name><identifier>private.control_C_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>VIM</windowname_only><autogen>
__KeyToKey__
KeyCode::C, ModifierFlag::CONTROL_L,
KeyCode::JIS_EISUU, KeyCode::C, ModifierFlag::CONTROL_L
</autogen></item><item><name>Custom Vim Change ESC+EISUU</name><identifier>private.escape_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>VIM</windowname_only><autogen>
__KeyToKey__
KeyCode::ESCAPE,
KeyCode::JIS_EISUU, KeyCode::ESCAPE
</autogen></item><!-- Emacs --><item><name>Custom Emacs Change CONTROL_G+EISUU</name><identifier>private.control_g_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>EMACS</windowname_only><autogen>
__KeyToKey__
KeyCode::G, ModifierFlag::CONTROL_L,
KeyCode::JIS_EISUU, KeyCode::G, ModifierFlag::CONTROL_L
</autogen></item><!-- PyCharm --><item><name>Custom PyCharm Change CONTROL_C+EISUU</name><identifier>private.control_C_plus_eisuu_pycharm</identifier><only>PYCHARM</only><autogen>
__KeyToKey__
KeyCode::C, ModifierFlag::CONTROL_L,
KeyCode::JIS_EISUU, KeyCode::ESCAPE
</autogen></item><item><name>Custom PyCharm Change ESC+EISUU</name><identifier>private.escape_plus_eisuu_pycharm</identifier><only>PYCHARM</only><autogen>
__KeyToKey__
KeyCode::ESCAPE,
KeyCode::JIS_EISUU, KeyCode::ESCAPE
</autogen></item><!-- VSCode --><item><name>Custom VSCode Ctrl+C to ESC</name><identifier>private.ctrl_c_to_escape_vscode</identifier><only>VSCODE</only><autogen>
__KeyToKey__
KeyCode::C, ModifierFlag::CONTROL_L,
KeyCode::JIS_EISUU, KeyCode::ESCAPE
</autogen></item><item><name>Custom VSCode Ctrl+N to Cursor Down</name><identifier>private.ctrl_n_to_cursor_down_vscode</identifier><only>VSCODE</only><autogen>
__KeyToKey__
KeyCode::N, ModifierFlag::CONTROL_L,
KeyCode::CURSOR_DOWN
</autogen></item><item><name>Custom VSCode Ctrl+P to Cursor Up</name><identifier>private.ctrl_p_to_cursor_up_vscode</identifier><only>VSCODE</only><autogen>
__KeyToKey__
KeyCode::P, ModifierFlag::CONTROL_L,
KeyCode::CURSOR_UP
</autogen></item><item><name>Custom VSCode Ctrl+M to Return</name><identifier>private.ctrl_m_to_return_vscode</identifier><only>VSCODE</only><autogen>
__KeyToKey__
KeyCode::M, ModifierFlag::CONTROL_L,
KeyCode::RETURN
</autogen></item></item></root>
カスタム設定をリロードし、チェックを入れます
- 最初に「Reload XML」をクリックして先ほどのprivate.xmlをリロードします
- Change KeyタブにPrivate Mappingの項目ができるので、全部にチェックを入れます
※ For Japaneseはお好みで
使う
便利!!!!!
特筆事項など
Application Bundle Identiferを調べる
ターゲットとなるアプリケーションのApplication Bundle Identifer(com.apple.Terminalとか)を調べるにはEvent Viewerを使います。
- Spotlightでeventで検索すると出てくるので起動します
- 対象のアプリを起動し、Appタブで確認します
- なぜかEvent Viewerはcmd+Qでアプリケーション終了できないので、Application Bundle Identiferを調べ終わったらメインメニューからQuit EventViewerで。
Vim
僕は端末のVimしか使わないのでMacVimなどを使っている人は設定が変わると思います。
Ctrl+CでNormalモードに戻った際日本語入力が続くのは非常にストレスなので、オススメな設定です。
もちろん、Ctrl+[に本設定を割り当てても良いでしょう
VSCode
はじめはVSCodeのデフォルトショートカットから"escape"に割り当てられているものをすべて抜き出し、ctrl+cに追加割当してみました。
が、コマンドパレットなどはctrl+cで抜けられませんでした。これはイライラする!ということで、Karabinerを使った方法に切り替えたところうまくいったので、上記keybinding.jsonの設定は不要になりました。
また、C-n/C-p/C-mの機能をKarabinerに持たせたことにより、VSCode側のキーボード設定(keybindings.json)が非常にシンプルになりました。
最終的にVSCode側のキーボード設定は下記の通りになりました。(C-n/C-p/C-m/C-cに関する設定をすべて削除できました)
//既定値を上書きするには、このファイル内にキーバインドを挿入します[{"key":"shift+cmd+\\","command":"workbench.action.splitEditor"},{"key":"cmd+ctrl+l","command":"editor.action.format","when":"editorTextFocus"},{"key":"ctrl+i","command":"jumpToNextSnippetPlaceholder","when":"editorTextFocus && inSnippetMode"},{"key":"cmd+ctrl+r","command":"workbench.action.tasks.runTask"},{"key":"cmd+ctrl+x","command":"workbench.action.tasks.terminate"}]
もちろん、エディタだけでなく色々なソフトのキーイベントを自分ごのみにカスタマイズしてはいかがでしょうか。