vimmerに殺されるその前に

https://qiita.com/fasahina/items/2767891134028648f288

**viは、モードのあるエディターです。一般人のみなさんがお使いになっている、WindowsやMacのデスクトップアプリケーションのエディターは、モードレス（モードのない）エディターです。**

*注：Twitterなどのクソレスホイホイを使っていると、viやemacsを愛用するご老人からクソレスがたくさん張り付くのですが、事前にお伝えしておくと、私は毎日viを利用しています。gitなどで。*

viのモード（標準モード・編集モード）が便利な理由の一つは、アローキー（矢印キー）を使わずにカーソル移動ができる点です。なぜそれが便利かというと、指をキーボードのホームポジションから離さずに、カーソルが移動できるからです。逆にいうと、ここにメリットを感じないなら、モードのあるエディターはうざいだけです。

エンジニアの多くは、短気で癇癪持ちで高効率にこだわります。キー入力の0.1秒にこだわるのです。

以前、私はtwitterでviをdisったら、viを愛する方からウンコ💩を投げられました。だから容赦なく💩を投げ返しました。

> ブラウザのURLの入力欄でviのキーバインドが使えますか？

レスは返ってきませんでした。

ちなみに、MacならデフォルトでEmacsのキーバインドが利用できます。`Control`キーを押しながら`b`と`f`を押してみて下さい。カーソルが移動します。`Control`キーと`h`で削除です。他にもたくさんありますが、覚えにくいのが難点です。操作性も良いとは言い難いでしょう。

# そこで登場したのが、私が考案したダイヤモンドカーソルです。

`Control`キーと`i` `k` `j` `l`を利用します。
`i` → 上
`k` → 下
`j` → 左
`l` → 右
です。

これをtwitterで投稿したら、

> ダイヤモンドの意味を知らねーんじゃねーの？ｗ

っていう💩を投げられました。エンジニアに向いてないですね。非効率なキーバインドを使ってて下さい。

## Krabiner-Element

macOS標準では、私の考案したダイヤモンドカーソルは実現できません。私の考案したダイヤモンドカーソルを使いたい方は、Krabiner-Elementをインストールして下さい。

`~/.config/karabiner/assets/complex_modifications` ディレクトリに以下のjsonファイルを保存して、環境設定から有効にして下さい。

```diamond_cursor.json
{
  "title": "Diamond Cursor",
  "rules": [
    {
      "description": "LControl + i, k, j, l is change to arrow cursor",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "i",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "up_arrow"
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "k",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "down_arrow"
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "j",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow"
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "l",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow"
            }
          ]
        }
      ]
    },
    {
      "description": "LControl + < or > is word jump!",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "comma",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                  "left_option"
              ]
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "period",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                  "left_option"
              ]
            }
          ]
        }
      ]
    },
    {
      "description": "LControl + : or ; is line jump!",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "semicolon",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                  "left_command"
              ]
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "quote",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                  "left_command"
              ]
            }
          ]
        }
      ]
    },
    {
      "description": "LControl + [ or ] is page up/down!",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "close_bracket",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "page_up"
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "backslash",
            "modifiers": {
              "mandatory": [
                  "left_control"
              ],
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "page_down"
            }
          ]
        }
      ]
    }
  ]
}
```

## え？Windows？？？

XPの時は、`猫まねき` とか `窓使いの憂鬱` を使っていましたが、Windows10では動かないんじゃないかなぁ？