プラグイン無しのVimで長年開発してきたエンジニアがIntellijを使うときの設定

## 概要
プラグイン無しのVimでJavaを書いてみたが限界を感じ初IDEデビューした。
しかし、デフォルト設定のIntellijは辛いので色々カスタマイズした。
ちなみに今までVimで書いてきた言語はPython, R, Go, Ruby, PHP, JavaScriptなど。

## 環境
- Mac Mojave version 10.14.6
- Intellij IDEA 2021.1.3(Community Edition)

## Vimプラグイン
操作をVimにするために、以下3つを入れる。

Preferences -> Plugins
![212911409_826422564915604_5779204695172392444_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/49e03183-177f-6304-3545-cc511a2a10c2.png)

## 自動インデント無効、(), [], {}, <>補完無効
余計なお世話。以下全てチェックを外す。しかし、自動インデント無効は完全にはできないみたい。。

Preferences -> Editor -> Smart Keys
![217034381_824548534859541_8651139003555752664_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/1e50de36-3e42-1317-e90f-4c61256a004f.png)

## コード補完無効
以下のチェックを外す。これは便利なんだけど、でもコード補完してたらプログラム覚えなくないか？

Preferences -> Editor -> General -> Code Completion
![213579588_245928330363257_2687119998372472016_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/e9c84edb-c37a-d7ab-2da7-7df15a076c9e.png)

## command -> ctrlにキーバインド変更
これに関しては、Intellijの設定ではなく、Karabiner-Elementsを使う。

まず、もともとcaps lockをcommandにするため、Karabiner-Elementsで既に以下のような設定をしている。(ちなみにUSキーボード)
![Screen Shot 2021-07-11 at 14.08.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/923eefbb-8bda-3659-814a-315b110b5614.png)


つまり、以下のようにしたい。

| 物理ボタン | mac操作時 | Intellij操作時 |
| --- | --- | --- |
| caps_lock | left_command | control |
| left_command | right_command | right_command |

left_commandをright_commandにしているのは、Intellij操作時に、物理caps_lock(論理left_command)をcontrolに変更すると、物理left_commandもcontrolに変更されてしまい、キーボード左下にcommandボタンがなくなってしまうので、right_commandに置き換えることで影響を受けないようにしている。

![IMG_5095.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/7b060e60-301f-b01e-6788-2af382706587.jpeg)


### Karabiner-Elementsで独自ルールを作成する
~/.config/karabiner/assets/complex_modifications/以下に独自ルールjsonを設置すると、Karabinerのcomplex_modificationsで読み込むことができる。
ファイル名は任意だが、ここではintellij.jsonという名前でファイルを作る。

```json:~/.config/karabiner/assets/complex_modifications/intellij.json
{
  "title": "The setting for Intellij",
  "rules": [
    {
      "description": "From left_command to left_control in Intellij",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "left_command"
          },
          "to": {
            "key_code": "left_control"
          },
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.jetbrains\\.intellij"
              ]
            }
          ]
        }
      ]
    }
  ]
}
```

left_commandをleft_controlに変更する設定だが、bundle_identifiersで特定のアプリケーションのときだけ実行されるように条件を指定する。
アプリケーション名の調べ方は以下を参照。

> "karabiner-EventViewer"で調べる場合、まず、"karabiner-EventViewer"を立ち上げ、次に調べたいアプリを開くか、"⌘-Tab"でアプリを選択すれば、"karabiner-EventViewer"の"Frontmost Application"画面にアプリの名称が表示されます。指定するアプリの名称は、正規表現でも指定できます。
https://qiita.com/s-show/items/a1fd228b04801477729c#conditionsbundle_identifiers

### Karabiner-Elementsで独自ルールを読み込む
Complex modificationsタブのAdd ruleをクリック
![Screen Shot 2021-07-11 at 14.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/ea5e877e-5b92-c1de-b133-9ad3f4df9a57.png)


追加したruleをEnableにする。
![Screen Shot 2021-07-11 at 14.08.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/d75b67f1-a45b-2f9c-e2a5-c5356f1f1a29.png)

これでIntellijを使うときだけ、left_commandがleft_controlになる。

## iTerm2
Intellijの話とは関係ないが、iTerm2操作時は、iTerm2の設定でcommandとcontrolを入れ替える設定をしている。

Preferences -> keys -> Remap Modifiers
![Screen Shot 2021-07-10 at 12.25.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/49cfabf3-b90e-992b-d17d-debdbbb50dbb.png)


以上

## 関連
- [【初めてのJava】Intellijでとりあえず動くものを作る](https://qiita.com/Esfahan/items/5dfd3a07cd30093092c5)
- [MacでIntelliJ IDEAのDocker Pluginを使う設定手順](https://qiita.com/Esfahan/items/439711ddf4e3991ddc6a)