Karabiner

Karabinerからホットキー経由で色々する

SimultaneousKeyPressesが楽しすぎる

Karabinerは、いわゆるキーリマップアプリです。つまり、あるキー入力を、別のキー入力に置き換えることができます。

ここで面白いのが、普通の文字キーの同時押しを変換前のキーとして指定できることです。例えば、「C+P」の同時押しを「⌘+C」に置き換えて、コピーするといったことができます。

これを活用すると、指の移動範囲を劇的に減らすことができます。超楽しいです。

実例

色々間違いがあったので、Qiitaで書き直しました。

Karabinerの設定を弄るためのTIPS

Karabinerは非常に便利なアプリですが、設定画面を眺めたときのワケワカ感がスゴくて尻込みしがちに思われます。

Karabinerが怖くなく、めどくなくなるために。

色々追記するかも。

自分で定義したリマップを有効化するための基本的な流れ

  • private.xmlを書く
    • 「Preferences > Misc & Uninstall > Open private.xml」で保存ディレクトリをFinderで開ける
  • Reload XMLする
    • 「Preferences > Change key」にある
  • チェックボックスにチェックを入れる

private.xmlの参考

色んな記事や公式ドキュメントを参考。

private.xmlの構造

最小構成はこれ。

  • xml
    • root
      • item
        • name
        • indetifier
        • autogen
        • autogen…
      • item…

autogen、itemはいくつあってもよい。

設定画面を開く

Karabinerの設定画面はウインドウとして固定されない。つまり、⌘+Tabで出てこない。

それでいて、普通に開くには「メニューバーのKarabinerアイコンをクリック→Preferences…をクリック」とかなのでめどい。

しかし、SpotlightやAlfredでKarabiner.appを叩けば設定画面が開く。

簡単にReload.xml

Karabinerにはコマンドラインインターフェースが用意されている。

使い方は上記記事の通りだが、reloadxmlが極めて有用。設定画面を起動する必要がなくなる。

/Applications/Karabiner.app/Contents/Library/bin/karabinerにエイリアスを設定しておくと使いやすい。

例えば、.bashrcに以下を追加する。

1
2
alias karabiner='/Applications/Karabiner.app/Contents/Library/bin/karabiner'
alias kreloadxml='/Applications/Karabiner.app/Contents/Library/bin/karabiner reloadxml'

kreloadxmlでリロードできる。

MacVimで簡単に編集したい

Alfred WorkflowでAlfredからprivate.xmlを開けるようにする。

キーワードから以下のbashスクリプトを起動。

1
2
3
PATH="$PATH:/usr/local/bin/" # PATHにmvimコマンドを追加
mvim ~/Library/Application\ Support/Karabiner/private.xml
/Applications/Karabiner.app/Contents/Library/bin/karabiner reloadxml

リロードもしたい。

.vimrcに以下を追加。

1
:command! Kre :!/Applications/Karabiner.app/Contents/Library/bin/karabiner reloadxml

編集後、:Kreでリロード。

Vimの挿入モード抜けるとき英数モードにするアレ(Karabiner設定例)

Vimの挿入モード抜けるとき英数モードにしたい問題

古代からあるアレです。

我々日本人はVimで日本語を入力することがあるわけですが、そのままノーマルモードに復帰すると、ノーマルモードのコマンドを入力したとき、変換されてしまいンアーッってなるやつです。

この対策として、キーリマップアプリを利用して、EscキーにEsc+英数キーを割り当てるという方法が知られています。

このジャンルではKeyRemap4MacBookというアプリが著名でしたが、現在は改名してKarabinerになっています。

今回、Karabinerの設定がまとまりましたので、記事にしてみます。

private.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
<root>
<list>
<item>
<name>LeaveInsMode with EISUU(Terminal)</name>
<identifier>private.app_terminal_esc_with_eisuu</identifier>
<only>TERMINAL</only>
<autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::N, VK_OPTION, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>
__SimultaneousKeyPresses__
KeyCode::J, KeyCode::K,
KeyCode::ESCAPE, KeyCode::JIS_EISUU,
Option::SIMULTANEOUSKEYPRESSES_RAW
</autogen>
</item>
</list>
</root>

only要素でTERMINALを指定した場合、各種ターミナルエミュレータ(で実行されるVim)はもちろんのこと、MacVimでも有効になるようです。

指定内容は以下の通りです。

入力 出力
Esc Esc+英数
⌥n Esc+英数
jk同時押し Esc+英数

徐々にめんどくさくなっていった歴史ともいう。

なお、SimultaneousKeyPressesのオプションをOption::SIMULTANEOUSKEYPRESSES_STRICT_KEY_ORDERにすると、指定した順序で押した場合のみ有効になります。

Key Repeat

ただ、初期設定だと同時押し判定が厳しすぎて押しづらいので調整します。

「Preferences > Key Repeat > Simultaneous Key Presses > Delay Threshold of Key」を50msから200msにしました。

これで、サクッとノーマルモードに復帰できるようになります。