Mac
Karabiner
karabiner-Elements

Karabiner-Elementの設定例について

More than 1 year has passed since last update.

Karabiner-Elementsの各設定項目の内容についてで"Complex Modifications"の各設定項目についてまとめましたので、この記事では私が行った設定を紹介していきます。紹介する設定は以下のとおりです。

  • 'ctrl-M'のような組み合わせを別の組み合わせに変換
  • 'command-P'のような組み合わせを任意の単独キーに変換
  • 'F5'や'Escape'などの単独のキーを'ctrl-o'のような組み合わせに変換
  • 任意のキーにマウスクリックを割り当てる。
  • 任意のキーにコマンド実行を割り当てる。
  • 一回のキータイプで複数回のキータイプを実現する
  • 単独で押した場合とShiftなどと組み合わせた場合で違う変換を行う
  • 'A'を押しながら'B'を押したら'C'に変換する
  • トリガーとなるキーを押している間だけ変換を実行する(2017年11月23日追加)
  • キーの2連打に特定の処理を割り当てる(2017年11月23日追加)
  • Emacsの'control-x control-f'のような2段階のキーストロークを実現する
  • 特定のアプリでのみ(またはその反対)変換を実行する(2017年11月23日追加)
  • IMEの状態に応じて処理を変える & IMEの状態を切り替えたい(2017年11月23日追加)
  • マウスクリックに処理を割り当てる(2017年11月23日追加)
  • 'control-左矢印'で'←'を入力する(2017年11月26日追加)

ちなみに、私の環境は以下のとおりです。注意事項としましては、原因は不明ですが、私の環境では、Karabiner-Elementsが、open_bracket('[')キー を close_bracket(']') と認識し、close_bracket(']')キーをbackslash('\') と認識するため、それに合わせた設定にしています。

  • Karabiner-Elementsのバージョン:11.3.0
  • MacOSのバージョン:10.12.6 (macOS Sierra)
  • キーボードの種類: bitFerrousのBKFB109UP1

なお、その他の設定例や、設定を楽に行う方法も記事にしていますので、そちらもあわせて確認して見てください。

Karabiner-Elementsを使ってJISキーボードの"全角/半角"でIMEを切り替える方法 - Qiita
Karabiner-Elementsの設定項目が増えてEmacsライクな設定が楽になった - Qiita
Karabiner-Elementsでenthumble(Windows App)のような操作を実現する方法 - Qiita
KE-complex_modificationsを使ってKarabiner-Elementsの設定を楽にする方法 - Qiita

'ctrl-M'のような組み合わせを別の組み合わせに変換

この設定を行う場合、"to""key_code""modifiers"の両方を指定します。
以下の例では、"control-PageUp"の組み合わせでは変換が実行されますが、例えば、"control-shift-PageUp"では変換が実行されません。("optional"にキーを指定していないため)

{
  "description": "control-pageupをcontrol-shift-tabに変換",
  "manipulators": [
    { "type": "basic",
      "from": {
        "key_code": "page_up",
        "modifiers": { "mandatory": [ "control" ] }
      },
      "to": [
        {
          "key_code": "tab",
          "modifiers": [ "control", "shift" ]
        }
      ]
    }
  ]
}

'command-P'のような組み合わせを任意の単独キーに変換

この設定を行う場合、"to"の値は"key_code"だけ設定すればOKです。
なお、"vk_launchpad"というコードは、LaunchPadを表示させるときに設定するキーです。ほかにも、"vk_mission_control"とか、"vk_dashboard"といったキーが用意されています。どんなキーが用意されているかは、設定画面の「Simple Modifications」の「To Key」に表示されるキーで確認できます。

{
  "description": "control-EscでLaunchPad表示",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "escape",
        "modifiers": { "mandatory": [ "control" ] }
      },
      "to": [
        { "key_code": "vk_launchpad" }
      ]
    }
  ]
}

'F5'や'Escape'などの単独のキーを'ctrl-o'のような組み合わせに変換

この設定を行う場合、基本的に"from"の値は"key_code"だけ設定すればOKです。もし、CapsLockのON・OFFに関わらず変換を実施したい場合、"optional"に"caps_lock"または"any"を設定します。

{
  "description": "Browser(F5 -> command-r)",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "f5" },
            "modifiers": { "optional": [ "caps_lock", "fn" ] },
      "to": [
        {
          "key_code": "r",
          "modifiers": [ "command" ]
        }
      ]
    }
  ]
}

/* CapsLockがONの状態でF5キーを押すと、なぜか"F5 + CapsLock + FN"キーの組み合わせになってしまうため、"optional"にはcaps_lockfnを指定しています。

任意のキーにマウスクリックを割り当てる。

マウスクリックを割り当てる場合、"key_code"の代わりに"pointing_button"を指定します。左クリックが"button1"、右クリックが"button2"、ホイールクリックが"middle"となリます。
Karabiner-EventViewerで"pointing_button"に設定するマウスクリックの名称を調査できますので、左右クリックとホイールクリック以外を設定する場合、自分で調べて設定してください。
また、以下のように "optional"に"any"を設定すると、"shift"や"command"などのキーを押しながら"Application"を押した場合に、それらのキーを押しながら右クリックしたのと同じ動作が実現できます。

{
    "description": "Applicationキーで右クリック",
    "manipulators": [
        {
            "type": "basic",
            "from": {
                "key_code": "application",
                "modifiers": { "optional": [ "any" ] }
            },
            "to": [
                { "pointing_button": "button2" }
            ]
        }
    ]
}
{
    "description": "shift+F10キーで右クリック",
    "manipulators": [
        {
            "type": "basic",
            "from": {
                "key_code": "f10",
                "modifiers": { "mandatory": [ "shift" ] }
            },
            "to": [
                { "pointing_button": "button2" }
            ]
        }
    ]
}

任意のキーにコマンド実行を割り当てる。

この設定を行う場合、"to"の値に"shell_command"を設定します。"shell_command"の値は、ターミナルで打ち込むコマンドを""で囲めばOKですが、引数をとるコマンドの場合、引数は''で囲む必要があります。
(例:"shell_command": "open -a 'iTunes.app'")

{
  "description": "Command+EでFinderを開く",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "e",
        "modifiers": {
          "mandatory": [ "command" ],
          "optional": [ "any" ]
        }
      },
      "to": [
        { "shell_command": "open -a 'finder'" }
      ]
    }
  ]
}

一回のキータイプで複数回のキータイプを実現する

この変換を実現したい場合、"to"の値に複数の"key_code"を設定すればOKです。
以下の設定例は、"Escape"を一度押すと、"Escape"を押した後に"japanese_eisuu(英数)"をタイプしたことにする設定です。

{
    "description": "ESCキーを押したら強制的にIMEをオフにする",
    "manipulators": [
        {
            "type": "basic",
            "from": {
                "key_code": "escape"
            },
            "to": [
                { "key_code": "escape" },
                { "key_code": "japanese_eisuu" }
            ]
        }
    ]
}

単独で押した場合とShiftなどと組み合わせた場合で違う変換を行う

この設定を行う場合、単独で押した場合と組み合わせで押した場合の挙動をそれぞれ設定する必要があり、かつ、片方の設定だけ適用したら意図した動作にならないことから、1つの"description"の中に2つの設定を記述します。こうすれば、2つの設定をまとめて1つのルールとして適用することができます。
なお、以下のように1つの"description"の中に2つ以上の"type"を作り、期待した動作にならない場合、"type"の順番を入れ替えるだけで期待通りの動作が実現することがあります。

{
  "description": "shift+CapsLockでCapsLockをON/OFF、CapsLock単体なら英数キー。",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "caps_lock",
        "modifiers": { "mandatory": [ "shift" ], "optional": [ "caps_lock" ] }
      },
      "to": [
        { "key_code": "caps_lock" }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "caps_lock",
        "modifiers": { "optional": [ "any" ] }
      },
      "to": [
        { "key_code": "japanese_eisuu" }
      ]
    }
  ]
}

'A'を押しながら'B'を押したら'C'に変換する

---2017年11月19日全面書き換え---

"modifiers"には、"A"や"D"等のキーを設定できますので、例えば、"A"を押しながら"B"を押すと"C"に変換するという設定も可能です。具体的には、次のようコードになります。

{
  "type": "basic",
  "from": {
    "key_code": "b",
    "modifiers": { "mandatory": [ "a" ] }
  },
  "to": [
    { "key_code": "left_arrow" }
  ]
}

しかし、上記の設定では、"A"を押してから"B"を押すまでの間、"A"が入力され続けてしまいます。
"modifiers"に"comand, shift, control, option, caps_lock, fn"キーを設定した場合、設定したキーを押すとFlagsChangedイベントが発生して次のキー入力を待ちます。しかし、"A"や"D"等を指定した場合、FlagsChangedイベントが発生せず、そのキーが押されている状態になります。そのため、「"A"を押してから"B"を押すまでの間、"A"が入力され続ける」という動作になります。
こうした変換を実現するには、次の2つの方法が考えられます。

  1. "set_variable"を使う方法
  2. トリガーとなる最初のキー(上記設定の"A"に相当)を"fn"に変換する方法

「"PrintScreen"だけ押したら画面全体のスクリーンショットを撮影。"PrintScreen + P"キーを押したら画面全体のスクリーンショット撮影してプレビューアプリで表示」という設定を、上記の2つの方法で実装した場合の例を掲載します。

"set_variable"を使う方法

"set_variable"を使って、最初のキーを押した時点でフラグを立て、フラグが立っている間に次のキーを押すと指定した処理を行い、最初のキーから手を離したらフラグを下ろす、という処理方法です。

  • "PrintScreen"を押したら"set_variable""printscreen_key"変数に1を代入
  • "PrintScreen"から手を離したら"printscreen_key"の値を0にする
  • "P"を押した時に"printscreen_key"変数の値が1ならば、スクリーンショット撮影とプレビューアプリでの表示を行う。
  • 'P'を押した時に"printscreen_key"の値が1以外ならば、通常どおり"P"を押したことにする。
  • PrintScreenを押した後、他のキーを押さずに手を離したらスクリーンショットの撮影を行う。
{
  "type": "basic",
  "from": { "key_code": "print_screen" },
  "to": [
    { "set_variable": { "name": "printscreen_key", "value": 1 } }
  ],
  "to_if_alone": [
    { "shell_command": "screencapture ~/Desktop/screenshot-`date +%Y%m%d-%H%M%S`.png" }
  ],
  "to_after_key_up": [
    { "set_variable": { "name": "printscreen_key", "value": 0 } }
  ],
  "conditions": [
    { "type": "variable_if", "name": "printscreen_key", "value": 0 }
  ]
},
{
  "type": "basic",
  "from": { "key_code": "p" },
  "to": [
    { "shell_command": "screencapture -P ~/Desktop/screenshot-`date +%Y%m%d-%H%M%S`.png" }
  ],
  "conditions": [
    { "type": "variable_if", "name": "printscreen_key", "value": 1 }
  ]
}

最初のキーを"fn"に変換する方法

最初のキーを"fn"に変換する設定を行い、次のキーについては、"modifiers""mandatory"に"fn"を指定して、"fn"と一緒に押さないと変換されないように設定します。"fn"に変換する理由は、"shift"や"command"とは異なり、既存のショートカットキーとの衝突が避けられるためです。

{
  "type": "basic",
  "from": { "key_code": "print_screen" },
  "to": [
    { "key_code": "fn" }
  ],
  "to_if_alone": [
    { "shell_command": "screencapture ~/Desktop/screenshot-`date +%Y%m%d-%H%M%S`.png" }
  ]
},
{
  "type": "basic",
  "from": {
    "key_code": "p",
    "modifiers": { "mandatory": [ "fn" ] }
  },
  "to": [
    { "shell_command": "screencapture -P ~/Desktop/screenshot-`date +%Y%m%d-%H%M%S`.png" }
  ]
}

トリガーとなるキーを押している間だけ変換を実行する

---2017年11月19日全面書き換え---

上記の設定と同じ方法で実現できます。(上記の設定も、"PrintScreen"を押しながら"P"を押すたびにスクリーンショットを撮影してプレビューアプリで表示します。)
以下の例は、"無変換/英数"を押している間だけ、"スペースキー"を"Enterキー"に変換する設定です。

{
  "description": "無変換/英数 + 「スペース/かな」で「Return/Escape」",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "spacebar",
        "modifiers": {
          "mandatory": [ "fn" ],
          "optional": [ "shift", "control", "caps_lock" ]
        }
      },
      "to": [
        { "key_code": "return_or_enter" }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "international5",
        "modifiers": {
          "optional": [ "caps_lock" ]
        }
      },
      "to": [
        { "key_code": "fn" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_eisuu" }
      ]
    }
  ]
}

キーの2連打に特定の処理を割り当てる

---2017年11月19日新規追加---

最初のキー(Shiftなど)を押したら"set_variable"を使って変数に1を代入(フラグを立てる)、次に同じキーを押した時に変数の値が1なら(フラグが立っている)特定の処理をするように設定をします。

左control2連打でSafariを起動

ポイントは、2つ目の"type""to"で、変数に値を格納した後、"key_code": "left_control"を指定していることです。この設定を省略すると、左controlを左controlとして使うことができなくなります。端的に言うと、左controlを使って"ctrl-A"のようなショートカットキーを使うことができなくなります。
また、"to_delayed_action""to_if_invoked""to_if_canceled"を設定して、最初のキーを押してから一定の時間が経過した時と、最初のキーと違うキーを押した場合にleft_control_key変数の値を初期化する設定も行う必要があります。
なお、"from""control"と入力しても、左右のcontrolをまとめて設定することはできません。左右のcontrolに同じ設定をしたい場合、それぞれのキーについて設定を行う必要があります。

{
  "description": "左controlを2回連打したらSafariを起動する",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "left_control" },
      "to": [
        { "shell_command": "open -a 'safari'" }
      ],
      "conditions": [
        { "type": "variable_if", "name": "left_control_key", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "left_control",
        "modifiers": { "optional": [ "any" ] }
      },
      "to": [
        { "set_variable": { "name": "left_control_key", "value": 1 } },
        { "key_code": "left_control" }
      ],
      "to_delayed_action": {
        "to_if_invoked": [
          { "set_variable": { "name": "left_control_key", "value": 0 } }
        ],
        "to_if_canceled": [
          { "set_variable": { "name": "left_control_key", "value": 0 } }
        ]
      },
      "conditions": [
        { "type": "variable_if", "name": "left_control_key", "value": 0 }
      ]
    }
  ]
}

テンキーのピリオド2連打をカンマに変換

実装方法は、上記の左controlとほぼ同じですが、1つ工夫したところがあります。
それは、1回目のピリオド入力の時点で、変数に1を代入してフラグを立てた後、一度"."を入力し、次にピリオドを入力したら、入力済みのピリオドを削除してからコンマを入力するようにしたことです。
これにより、"1.0"のような入力をする際に、タイプした通りに画面に入力した内容を表示することができるようになりました。

{
  "description": "テンキーの'.(ピリオド)'2連打で',(カンマ)'を入力",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "keypad_period" },
      "to": [
        # 以下の {"key_code": "keypad_period"} で入力された"."を削除する
        { "key_code": "delete_or_backspace" },
        { "key_code": "comma" },
        { "set_variable": { "name": "press_period_key", "value": 0 } }
      ],
      "conditions": [
        { "type": "variable_if", "name": "press_period_key", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": { "key_code": "keypad_period" },
      "to": [
        { "set_variable": { "name": "press_period_key", "value": 1 } },
        { "key_code": "keypad_period" }
      ],
      "to_delayed_action": {
        "to_if_invoked": [
          { "set_variable": { "name": "press_period_key", "value": 0 } }
        ],
        "to_if_canceled": [
          { "set_variable": { "name": "press_period_key", "value": 0 } }
        ]
      },
      "conditions": [
        { "type": "variable_if", "name": "press_period_key", "value": 0 }
      ]
    }
  ]
}

Emacsの'control-x control-f'のような2段階のキーストロークを実現する

---2017年11月17日全面書き換え---

Ver.11.1.12で追加されたto_delayed_action, to_if_invoked, to_if_canceledという3つの設定項目を活用します。具体的な設定は以下のとおりです。

{
  "description": "Two stroke key_bind",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "c", "modifiers": { "mandatory": [ "control" ] }
      },
      "to": [
        { "key_code": "q", "modifiers": [ "command" ] }
      ],
      "conditions": [
        { "type": "variable_if", "name": "ctrl-x", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "f", "modifiers": { "mandatory": [ "control" ] }
      },
      "to": [
        { "key_code": "o", "modifiers": [ "command" ] }
      ],
      "conditions": [
        { "type": "variable_if", "name": "ctrl-x", "value": 1 }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "x",
        "modifiers":
         { "mandatory": [ "control" ], "optional": [ "caps_lock" ] }
      },
      "to": [
        { "set_variable": { "name": "ctrl-x", "value": 1 } }
      ],
      "to_if_alone": [
         { "key_code": "x" }
      ],
      "to_delayed_action": {
        "to_if_invoked": [
          { "set_variable": { "name": "ctrl-x", "value": 0 } }
        ],
        "to_if_canceled": [
          { "set_variable": { "name": "ctrl-x", "value": 0 } }
        ]
      },
      "conditions": [
        { "type": "variable_if", "name": "ctrl-x", "value": 0 }
      ]
    }
  ]
}

このコードは、以下のとおり動作します。

  1. "ctrl-x"を押すとctrl-x変数に2を代入する(toset_variableが実行される)
  2. 次にタイプしたキーにより、以下の処理が行われる。
    1. "ctrl-c" -> "command-q"に変換
    2. "ctrl-f" -> "command-f"に変換
    3. 上記1〜2以外 -> ctrl-x変数に0を代入する。(to_if_canceledset_variableが実行される)
  3. "ctrl-x"をタイプした後、一定の時間が経過するとctrl-x変数に0を代入する。(to_if_invokedset_variableが実行される)

特定のアプリでのみ(またはその反対)変換を実行する

特定のアプリでのみ変換を実行したい場合、"conditions""type""frontmost_application_if"を設定し、あわせて"bundle_identifiers"でアプリを指定します。以下の例は、Safariだけで変換を実行するため、"^com\\.apple\\.Safari"を指定しています。
反対に、特定のアプリ以外で変換を実行したい場合、"conditions""type""frontmost_application_unless"を設定し、あわせて"bundle_identifiers"に変換を実行したくないアプリを指定します。

{
  "type": "basic",
  "from": {
    "key_code": "page_up",
    "modifiers": {
      "mandatory": [ "control" ]
    }
  },
  "to": [
    {
      "key_code": "tab",
      "modifiers": [ "control", "shift" ]
    }
  ],
  "conditions": [
    {
      "type": "frontmost_application_if",
      "bundle_identifiers": [ "^com\\.apple\\.Safari" ]
    }
  ]
}

IMEの状態に応じて処理を変える & IMEの状態を切り替えたい

IMEの状態に応じて処理を変える場合、"conditions""type""input_sources"を設定し、"language"でIMEの状態を指定します。また、IMEの状態をKarabiner-Elementsで直接切り替える場合、"to""select_input_source"を設定し、"input_source_id"でIMEの状態をしています。"input_sources""input_source_id"に指定するIMEの状態については、'Karabiner-EventViewer'の'Variables'で確認できます。
なお、IMEの状態の切り替えについては、"to""key_code": "japanese_eisuu"又は"key_code": "japanese_kana"を指定しても切り替えられます。これは、"英数"や"かな"キーを押してIMEを切り替えることと同じ動作を行うものです。
以下の設定は、Windowsのように、JISキーボードの"全角/半角"キーをIME切り替えキーとして使う設定です。

{
  "description": "全角/半角キーでIMEのON/OFFを切り替える",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.apple\\.inputmethod\\.Kotoeri\\.Japanese$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "en" }
          ]
        }
      ]
    },
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.apple\\.inputmethod\\.Kotoeri\\.Roman$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "ja" }
          ]
        }
      ]
    }
  ]
}

マウスクリックに処理を割り当てる

"from""key_code"ではなく"pointing_button"を指定すると、マウスクリックに何らかの処理を割り当てることが可能になります。
ただし、"pointing_button""button1"を指定した場合、左クリックに何らかの処理を割り当てることになりますので、左クリックが左クリックとして使用できなくなります。この点には十分注意して設定を行う必要があります。
なお、この処理はVer.11.2.0以降で可能となったようです。

{
  "description": "Finderでミドルクリックをしたら新しいタブで開く",
  "manipulators": [
    {
      "type": "basic",
      "from": { "pointing_button": "button3" },
      "to": [
        {
          "key_code": "t",
          "modifiers": [ "command" ]
        }
      ],
      "conditions": [
        {
          "type": "frontmost_application_if",
          "bundle_identifiers": [ "^com\\.apple\\.finder$" ]
        }
      ]
    }
  ]
}

'control-左矢印'で'←'を入力する

Karabiner-Elementsに文字入力の機能はありませんが、"shell_command"を使ってAppleScriptを実行し、AppleScriptのクリップボードへのデータ格納機能と、キー入力実行機能を活用することで、疑似的に文字入力が可能になります。
クリップボードに文字を格納し、それを貼り付けする動作は、ターミナルでは以下のとおり入力します。

# クリップボードに文字を格納
osascript -e 'set the clipboard to "←"'

# クリップボードのデータを貼り付け
osascript -e 'tell application "System Events" to keystroke "v" using command down'

上記のコマンドを踏まえて、Karabiner-Elementsで実装すると以下のコードで上記の動作が実現できます。注意点は、"shell_command"に指定するコマンド文字列は、"で囲む必要がありますが、元のコマンド文字列に"が含まれる場合、"\でエスケープ処理しないといけません。

{
  "description": "'fn + 左矢印キー'で'←'入力",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "left_arrow",
        "modifiers": {
          "mandatory": [ "fn" ],
          "optional": [ "caps_lock" ]
        }
      },
      "to": [
        { "shell_command": "osascript -e 'set the clipboard to \"\"'" },
        {
          "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"v\" using command down'"
        }
      ]
    }
  ]
}

なお、上記の設定のもう一つの注意点は、'fn + 左矢印キー'を押してから'←'が入力されるまで、体感で0.5秒くらい待たされるということです。
そのため、'fn + 左矢印キー'を押してすぐ'A'とかを押すと、'A'が入力されてから'←'が入力されたりします。AppleScriptの動作が早ければこういう問題も起きないのですが、現状では仕様と思ってあきらめるしかありません。

補足

最後になりましたが、私の設定を公開していますので、よろしければ参考にしてください。
s-show/KE-complex_modifications

また、こちらのページから、私の設定をKarabiner-Elementsにimportできます。
Karabiner-Elements complex_modifications rules by s-show

なお、pqrs-org/KE-complex_modificationsで配布されているツールを使いますと、Karabiner-Elementsの設定ファイルを書くのが楽になります。
このツールの使い方については、KE-complex_modificationsを使ってKarabiner-Elementsの定義を色々作って公開するで詳しく解説されています。私もKE-complex_modificationsを使ってKarabiner-Elementsの設定を楽にする方法 - Qiitaという記事を書いていますので、参考にしてください。前者の記事では、Karabiner-Elementsの設定で役に立つ情報が色々ありますので、非常に参考になると思います。