MACでカーソル操作をvimモードでやる

# 始めに
皆さんはカーソル操作はどのようにしていますでしょうか？大体の人は普通に矢印キーを使っていると思われますが、ホームポジションから手を移動することになり結構面倒に感じていないでしょうか。
実はMACにはデフォルトで矢印キー以外にemacsと同じショートカットキーで移動できるようになっています。

|キー|操作内容|
|---|---|
|Ctrl+p|上に移動(previous)|
|Ctrl+n|下に移動(next)|
|Ctrl+b|左に移動(back)|
|Ctrl+f|右に移動(forward)|
|Ctrl+a|行頭に移動|
|Ctrl+e|行末に移動|

これを使えばホームポジションを移動せずにカーソルキーを移動できますが、emacsに慣れていない人にとってはやりづらいと思います。vimだったら分かるのに・・・。
そんな方に向けにvimと同じ操作方法でカーソルキーを移動できるように設定する方法を紹介したいと思います。

# Karabiner-elementsの設定
## インストール
ショートカットキーをカスタマイズすることになるため、以下からKarabiner-elementsをインストールします。
Karabiner-ElementsはmacOS Sierra以降から対応しているようで、Sierra未満の方はKarabinerを使う必要があるらしいので注意してください。

https://karabiner-elements.pqrs.org/

## カーソル移動設定情報をimport
Karabiner-Elementsの設定画面が出たら「Complex modifications」タブに移動して、「Add rule」をクリックしてください。

![スクリーンショット 2021-04-11 7.58.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/c7b36463-1e55-ff15-4082-a86b74614a63.png)

ダイアログの上にある「Import more rules from the Internet (open a web browser)」をクリックしてください。
![スクリーンショット 2021-04-11 7.55.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/c8e1096e-bfe8-f973-f56b-8c0fc36bc397.png)

ブラウザが開いてルール一覧が表示されるので、「vim」と検索して、「Left ctrl + hjkl to Arrow Keys Vim」の隣にある「Import」をクリックしてImportしてください。
![スクリーンショット 2021-04-11 7.50.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/dd59265f-9284-a602-be29-1e470510ba2e.png)

ダイアログに戻って先ほどImportしたルールが表示されているのを確認してください。そしてそのルールの隣にある「Enable」をクリックします。

![スクリーンショット 2021-04-11 8.22.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/6f73e107-f2a6-cc9e-df86-8a285368296f.png)

Enabled rulesに追加されたら設定完了です。Ctrl+hjklでカーソルキーが移動されることを確認してください。

![スクリーンショット 2021-04-11 8.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/9ceb48c7-47a7-8de5-a1f5-881c013c3afd.png)

## 新しい行に移動（oキー）の設定
以上の設定だけでも十分ですが、個人的にカーソルが途中でも改行して下に移動する操作（vimでいうoキー）が便利なのでそれの設定方法も紹介したいと思います。
こちらの設定はパッと見ネット上には上がっていなかったので自前で作りました。
分かりづらいですが、`~/.config/karabiner/assets/complex_modifications/karabiner-custom.json`に以下のファイルを配置します。
設定内容を簡単に説明すると、Ctrl+oを入力したら、Ctrl+e(行末移動)した後にenter(改行)操作をするようにしています。設定項目の詳細は参考記事などをご参照ください。

```json:~/.config/karabiner/assets/complex_modifications/karabiner-custom.json
{
  "title": "カスタム",
  "rules": [
    {
      "description": "改行",
      "manipulators": [
        {
          "from": {
            "key_code": "o",
            "modifiers": {
              "mandatory": ["left_control"],
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "e",
              "modifiers": ["left_control"]
            },
            {
              "key_code": "return_or_enter"
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}
```

再び「Add rule」を押してダイアログを開いたら登録できるルールが増えていると思います。「改行」というルールの横にある「Enable」を押して、先ほどと同じようにルールを有効化してください。

![スクリーンショット 2021-04-11 7.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187768/0cfc0a2b-43eb-f924-d4f3-d7475f7e7d5a.png)

Enabled rulesに追加されているのを確認したら、Ctrl+oキーで行の途中でも新規行を追加して下に移動できるようになっていると思います。

# 終わりに
以上がショートカットキーを設定してvimと同じカーソル操作をする方法でした。この設定に慣れるとカーソルを移動するために一々ホームポジションを離れる必要がなくなり一気に効率が上がると思います。設定も簡単なので試してみてはいかがでしょうか。
今回紹介したKarabiner-Elementsはショートカットキーのカスタマイズをかなり色々できそうなので、興味がある方は調べて自分好みにカスタマイズしていくといいかもしれないです。ただカスタマイズ用のjsonファイルを作る際にどこでエラーしているのかを知る術がないのが辛いですが。。😅（エラーの場合はルール一覧に表示されなくなります）

## 参考記事

https://knowledge.sakura.ad.jp/23355/