Karabiner-Elementsでcaps lockで修飾キー全押し、caps lock + 修飾キーで押したキー以外の修飾キーを押す方法(reverseキー)

タイトルだけだと、理解できない人もいるかもしませんが、下記の挙動をするキーをKarabiner-Elementsで作成します。
| 押すキー | 押されたことになるキー |
|---|---|
| caps lock | control + option + shift + command |
| caps lock + control | option + shift + command |
| caps lock + option | control + shift + command |
| caps lock + shift | control + option + command |
| caps lock + command | control + option + shift |
本来であれば、control + option + shift + commandは4つのキーを同時に押す必要がありますが、caps lockを1つ押すだけで済みます。
さらに、caps lockと他の修飾キーを一緒に押すと、4つの修飾キーの中から押されたキーを引いたキーが押されたことになります。
この挙動も本来は3つのキーを同時に押す必要があるところを2つで済むようになります。
このような挙動をするキーを勝手に「reverseキー」と呼んでいます。
Karabiner-Elementsの設定
下記のパスに新しい.jsonを作成して、Karabiner-Elementsに独自ルールを追加します。
/Users/ユーザ名/.config/karabiner/assets/complex_modificationsかなり長いですが、ファイルの中身は下記のJSONを貼り付けて保存します(もっとスマートなやり方があるかもしれません)。
{
"title": "reverse key",
"rules": [
{
"description": "Change caps_lock key to reverse key",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "caps_lock"
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_control",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_option",
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_control",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"command"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_option",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"control",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_shift",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_control",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"control",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_option",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"option",
"control",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_command",
"lazy": true
}
}
]
}
]
}保存したら、Karabiner-Elementsを起動して[Complex modifications]→[Rules]の「Add rule」で「Change caps_lock key to reverse key」を追加(Enable)します。

キーを押す順番
caps lockは他の修飾キーとは違う特殊なキーのため、ショートカットキーを押す順番が制限されてしまいます。
具体的には「修飾キー → caps lock → 他のキー」と入力しないとreverseキーの挙動になりません。
逆に「caps lock → 修飾キー → →他のキー」の場合は修飾キー全押し判定になってしまいます。

Alfred 4のDefault Results(デフォルト検索結果)で設定できることまとめ
macOSのシステム環境設定「Dock」の設定見直し
日々のちょっとした作業を効率的にする小技 #1日1Tips – 2019年7月
右側の修飾キーをフル活用!Karabiner-ElementsでKeyboard Maestroのマクロを発火させる方法
Macのプレビュー.appを使って画像のトリミングを行う方法
Macでデュアルディスプレイ時に、通知を表示するディスプレイを指定する方法
Alfredの設定画面でショートカットキーが認識されない場合はKeyboard Maestroの設定を確認しよう
SNSやウェブサービスを並べて、見やすく管理できるアプリ「Stack」
Path Finder 8のサイドバー設定がたまに初期化されてしまう問題
MacのターミナルアプリはiTerm2で決まり!!オススメの設定と基本的な機能まとめ
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
AirPodsで片耳を外しても再生が止まらないようにする方法
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法