1. 親指を Virtual modifier 1に
例えば JIS キーボードの場合は Spaceの幅が狭いため、Spaceの左右にあるキーは親指で押しやすいです。そのため、Virtual modifier として設定するのがおすすめです。
以下のように定義すると、lang12が押されている間は変数 vk1
に 1
(離した時は 0
)が設定され、単体で押した場合は かなとして動作するようになります。
{"type":"basic","from":{"key_code":"lang1"},"to":[{"set_variable":{"name":"vk1","value":1}}],"to_after_key_up":[{"set_variable":{"name":"vk1","value":0}}],"to_if_alone":[{"key_code":"japanese_kana"}]}
2. vk1 + H / J / K / Lでどこでもカーソル移動
以下の定義は、先程定義した vk1
を使って vk1 + H / J / K / Lで上下左右にカーソル移動できるようにしたものです。これで、どのアプリにいても Vim 気分を味わうことができます。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"h","modifiers":{"optional":["any"]}},"to":[{"key_code":"left_arrow"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"j","modifiers":{"optional":["any"]}},"to":[{"key_code":"down_arrow"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"k","modifiers":{"optional":["any"]}},"to":[{"key_code":"up_arrow"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"l","modifiers":{"optional":["any"]}},"to":[{"key_code":"right_arrow"}]}
3. vk1 + N / M / , / .でマウス移動
以下の定義は、先程の H / J / K / Lからキーボードの行を一段下げた N / M / , / .でマウスを移動させるものです。同時に Shiftも押している場合に移動距離を半分にすることで、低速モードを実現しています。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"n","modifiers":{"mandatory":["shift"]}},"to":[{"mouse_key":{"x":-1536}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"m","modifiers":{"mandatory":["shift"]}},"to":[{"mouse_key":{"y":1536}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"comma","modifiers":{"mandatory":["shift"]}},"to":[{"mouse_key":{"y":-1536}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"period","modifiers":{"mandatory":["shift"]}},"to":[{"mouse_key":{"x":1536}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"n"},"to":[{"mouse_key":{"x":-3072}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"m"},"to":[{"mouse_key":{"y":3072}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"comma"},"to":[{"mouse_key":{"y":-3072}}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"period"},"to":[{"mouse_key":{"x":3072}}]}
また、以下のように vk1 + /で左クリックというのもおすすめです。ダブルクリックをしたい場合は /を素早く二度、右クリックをしたい場合は Controlを押しながら /という感じです。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"slash","modifiers":{"optional":["any"]}},"to":[{"pointing_button":"button1"}]}
4. vk1 + Fで Esc
Vim を使う方は特に Escは多用すると思います。Touch Bar になって物理キーがなくなっても安心です。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"f"},"to":[{"key_code":"escape"}]}
5. vk1 + P / Oで Control+Tab / Control+Shift+Tab
Control+Tabはブラウザ等でよく利用すると思います。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"o"},"to":[{"key_code":"tab","modifiers":["control","shift"]}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"p"},"to":[{"key_code":"tab","modifiers":["control"]}]}
『iTerm2
がアクティブな場合は Control+Tabではなく Control+T3Control+Nにバインドすることで tmux
で次の Window を表示できるようにしたい』といった場合は、以下のようにして実現できます。
{"type":"basic","conditions":[{"type":"frontmost_application_if","bundle_identifiers":["com.googlecode.iterm2"]},{"type":"variable_if","name":"vk1","value":1}],"from":{"key_code":"o"},"to":[{"key_code":"t","modifiers":["control"]},{"key_code":"p","modifiers":["control"]}]},
6. セミコロンをエンターに
;を Enterにしてしまうのもおすすめです。何のために Enter が大きくなっているんだと思われるかもしれませんが、おすすめです。以下のように定義することで、Control + ;でちゃんと ;
も入力できますし、Shift + ;で+
も入力できます。
{"type":"basic","from":{"key_code":"semicolon","modifiers":{"mandatory":["control"]}},"to":[{"key_code":"semicolon"}]},{"type":"basic","from":{"key_code":"semicolon","modifiers":{"mandatory":["shift"]}},"to":[{"key_code":"semicolon","modifiers":["shift"]}]},{"type":"basic","from":{"key_code":"semicolon","modifiers":{"optional":["any"]}},"to":[{"key_code":"return_or_enter"}]}
7. アプリを一発呼び出し
vk1
同様、まずは以下のように Spaceの左側にあるキー lang2を Virtual modifier の vk2
として定義します。
{"type":"basic","from":{"key_code":"lang2"},"to":[{"set_variable":{"name":"vk2","value":1}}],"to_after_key_up":[{"set_variable":{"name":"vk2","value":0}}],"to_if_alone":[{"key_code":"japanese_eisuu"}]}
この状態で以下のように定義すると、vk2 + Jで Google Chrome を起動することができます。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk2","value":1}],"from":{"key_code":"j"},"to":[{"shell_command":"open -a 'Google Chrome.app'"}]}
また、以下のように定義すると、vk2 + Eを押した時に、『Alfred 3 を起動して snip
が入力された状態にする』といったこともできます。
{"type":"basic","conditions":[{"type":"variable_if","name":"vk2","value":1}],"from":{"key_code":"e"},"to":[{"shell_command":"osascript -e \"tell application \\\"Alfred 3\\\" to search \\\"snip \\\"\""}]}
8. ホームポジションでの数字入力
Spaceの右 (vk1
) のさらに右にあるキー right_guiも vk3
として定義してしまいます。
{"type":"basic","from":{"key_code":"right_gui"},"to":[{"set_variable":{"name":"vk3","value":1}}],"to_after_key_up":[{"set_variable":{"name":"vk3","value":0}}]}
この状態で以下のように A, B, ... :まで定義すると、
{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"a"},"to":[{"key_code":"1"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"s"},"to":[{"key_code":"2"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"d"},"to":[{"key_code":"3"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"f"},"to":[{"key_code":"4"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"g"},"to":[{"key_code":"5"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"h"},"to":[{"key_code":"6"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"j"},"to":[{"key_code":"7"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"k"},"to":[{"key_code":"8"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"l"},"to":[{"key_code":"9"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"semicolon"},"to":[{"key_code":"0"}]},{"type":"basic","conditions":[{"type":"variable_if","name":"vk3","value":1}],"from":{"key_code":"quote"},"to":[{"key_code":"hyphen"}]}
ホームポジションにいながら数字を入力できるようになります。電話番号を入力する際などに特に便利に感じます。
入力 | 結果 |
---|---|
vk3 + A | 1 |
vk3 + S | 2 |
vk3 + D | 3 |
vk3 + F | 4 |
vk3 + G | 5 |
vk3 + H | 6 |
vk3 + J | 7 |
vk3 + K | 8 |
vk3 + L | 9 |
vk3 + ; | 0 |
vk3 + : | - |
まとめ
こちらに載せていないすべての設定は https://github.com/hioki-daichi/Personal-Rules-For-Karabiner-Elementsに公開しています。Ruby から JSON を生成していたりします。
すでに Karabiner-Elements
がインストール済みであれば、以下の URL をお使いのブラウザに貼り付けるだけで設定をインポートすることができます。よかったらお試しください。
karabiner://karabiner/assets/complex_modifications/import?url=https://raw.githubusercontent.com/hioki-daichi/Personal-Rules-For-Karabiner-Elements/master/personal_rules.json
Apple Internal Keyboard の Spaceの右に配置されているキーです。キーボードによって異なると思いますので、Karabiner-EventViewerを使ってご確認ください。 ↩
デフォルトだと C-bだと思います。
~/.tmux.conf
でunbind C-b; set -g prefix C-t; bind C-t send-prefix
して変えています。 ↩