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 → 修飾キー → →他のキー」の場合は修飾キー全押し判定になってしまいます。

散らかりがちなMacのメニューバーをBartender 3でキレイに整理する
Macの文字入力をもっと楽にする小技集
Alfred 4の詳細設定(Advanced)を見直してAlfredを更に便利にする
Alfredを最大限活用する、ブラウザのブックマーク管理方法について
AlfredでFigmaのチーム・プロジェクト・ファイルを素早くの検索ができる「Alfred Figma Workflow」
macOS用パッケージ管理システムのHomebrewの概要とインストール方法
Chrome拡張機能の「Get RSS Feed URLs」でサイトのRSSを簡単に取得
Delay StartでMac起動後にアプリを遅延起動する
【2026年版】Karabiner-Elementsで実現する右commandキー活用のススメ
Mac起動時に「Default Folder X は Finder のツールバーにボタンを追加しました」というダイアログが表示される場合の対処法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
日々の作業を短縮して、やるべきことに集中するための小技集 #1日1Tips – 2020年1月
Alfred 4のターミナル機能で実行されるアプリをiTerm2に変更する方法
gulpでPostCSSを使う方法
Google Chromeに「タブを検索」機能が追加!開いているタブや最近閉じたタブから検索が可能に!
Backlogの課題期限をカレンダーアプリのFantastical 3に表示させる方法
Alfredのスニペット機能を便利に使いこなすための管理方法
動画の圧縮をFinder右クリックメニューの「選択したビデオファイルをエンコード」から行う
話題の「瞑想」にはどんな効果がある?続けることで得られるメリット
MacのSIPのオン・オフを切り替える方法
Google Meetをさらに便利にする便利なChrome拡張機能と、公式でサポートされるようになった機能