Windows と Mac を両方使っている僕が設定している方向キーのキーバインド (US 配列)

日本語やコードをタイピングしているときにホームポジションから手を動かしたくない人向けです。キーバインド設定アプリで設定しているので、どのエディターや IDE などでも同じように動きます。

具体的には A の左側にある Caps Lock を小指で押しながら操作するイメージです。方向キー以外にもよく使用するキーを割り当てているので参考にしてください。

※ HHKB 向けではないです。

## キーバインド設定アプリ

それぞれのアプリの使い方は公式ドキュメントを見るか、 Qiita などにわかりやすい記事があるのでそちらを参考にしてください。

Windows: [AutoHotkey](https://www.autohotkey.com/)

Mac: [Karabiner-Elements - Software for macOS](https://pqrs.org/osx/karabiner/)

## キーバインド

Windows, Mac ともに同じ動きになるように設定しています。 Mac はデフォルトのキーバインドに Home と End がバインドされているので未設定です。

Windows:

```
↑: Caps Lock + i
→: Caps Lock + l
↓: Caps Lock + k
←: Caps Lock + j
Home: Caps Lock + a
End: Caps Lock + e
Backspace: Caps Lock + h
Esc: Caps Lock + q
```

Mac:

```
↑: Left Control + i
→: Left Control + l
↓: Left Control + k
←: Left Control + j
Backspace: Left Control + h
Esc: Left Control + q
```

## キーバインドの動かすための設定ファイル

Caps Lock は邪魔で使いたくないので Windows の場合は設定ファイルで OFF に、 Mac の場合は Karabinder-Elements > Simple Modifications 設定画面から Caps Lock を Left Control に割り当てています。

Windows:

```ahk
sc03A::return

sc03A & i::Up
sc03A & l::Right
sc03A & k::Down
sc03A & j::Left
sc03A & a::Home
sc03A & e::End
sc03A & h::BS
sc03A & q::ESC
```

Mac:

```json
{
  "title": "My key",
  "rules": [
    {
      "description": "Change left_control + i/j/k/l to Arrow Keys",
      "manipulators": [
        {
          "from": {
            "key_code": "i",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "up_arrow"
            }
          ],
          "type": "basic"
        },
        {
          "from": {
            "key_code": "j",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "left_arrow"
            }
          ],
          "type": "basic"
        },
        {
          "from": {
            "key_code": "k",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "down_arrow"
            }
          ],
          "type": "basic"
        },
        {
          "from": {
            "key_code": "l",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "right_arrow"
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "Change left_control + q/h to escape delete Keys",
      "manipulators": [
        {
          "from": {
            "key_code": "q",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "escape"
            }
          ],
          "type": "basic"
        },
        {
          "from": {
            "key_code": "h",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "delete_or_backspace"
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}
```

## 備考

慣れるまで少し時間はかかりますが、作業がとても捗るのでオススメです。僕が設定しているキーバインドでなくても自分が使いやすいと思うキーバインドにして書き直せば自分好みのキーバインドになるので、ぜひ探してみてください。

Emacs, Vim, Mac デフォルトのキーバインドなどを色々試したのですが、個人的にはこれが使いやすかったです。右手人差し指をホームポジションの J キーに置いたまま操作しやすかったのがよかった点です。
他にはゲーマー向け WASD 配列も左手だけで全て操作が可能になるので、左小指が吊らないならそれも面白いと思いました。

最近は Page Up, Page Down, 右文字削除の Delete (fn + Delete) キーも使うことが多いので、どこかに割り当てようと模索しています。