1. 親指を Virtual modifier 1 に
例えば JIS キーボードの場合は Space の幅が狭いため、Space の左右にあるキーは親指で押しやすいです。そのため、Virtual modifier として設定するのがおすすめです。
以下のように定義すると、lang1 2 が押されている間は変数 vk1
に 1
(離した時は 0
)が設定され、単体で押した場合は かな として動作するようになります。
{
"type": "basic",
"from": { "key_code": "lang1", "modifiers": { "optional": [ "any" ] },
"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 + / で左クリック、vk1 + _ で右クリックというのもおすすめです。素早く二度入力すればダブルクリックできます。
{
"type": "basic",
"conditions": [ { "type": "variable_if", "name": "vk1", "value": 1 } ],
"from": { "key_code": "slash", "modifiers": { "optional": [ "any" ] } },
"to": [ { "pointing_button": "button1" } ]
},
{
"type": "basic",
"conditions": [ { "type": "variable_if", "name": "vk1", "value": 1 } ],
"from": { "key_code": "international1", "modifiers": { "optional": [ "any" ] } },
"to": [ { "pointing_button": "button2" } ]
}
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+T3 Control+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", "modifiers": { "optional": [ "any" ] },
"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", "modifiers": { "optional": [ "any" ] },
"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 を生成していたりします。
( 追記: Rust で生成、ついでにファイルの更新まで行うよう変更しました → https://github.com/hioki/karabiner-json-updater )
すでに Karabiner-Elements
がインストール済みであれば、以下の URL をお使いのブラウザに貼り付けるだけで設定をインポートすることができます。よかったらお試しください。
karabiner://karabiner/assets/complex_modifications/import?url=https://raw.githubusercontent.com/hioki/karabiner-json-updater/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
して変えています。 ↩