vscode vim でvim-airline っぽくモード毎にstatusbar の色を変える

# 環境

- vscode 1.41.1
- vscodevim 1.12.0
- vscode theme Icebarg
- macOS Mojave 10.14.

# 目標

vscode でvim-airline 風にモード毎にstatusbar の色を変えたい

https://github.com/vim-airline/vim-airline

こんな風に↓
![vim-airline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/67ef199d-0f4f-d2fd-ecb8-b6c5a3cae32f.png)

# 詰まったところ

vscode のtheme を設定後、settings.json でstatusbar の色を指定したが背景色しか反映されなかった

Normalモード
<img width="1279" alt="normal_ok.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/f3280331-f499-a91c-6090-f1e6ebd34902.png">

Insertモード 文字が見ずらい...
<img width="1280" alt="insert_error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/0d7ddf42-3403-0c90-4e61-af922ba0e6a4.png">

Visualモード 同じく見ずらい...
<img width="1280" alt="visual_error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/91454d67-283f-45eb-e720-4d22349c561a.png">

Replaceモード これは嫌だ...
<img width="1280" alt="replace_error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/4092394f-7448-785c-a562-dbd7b8a70946.png">

# 方法

vscode vim はとても親切でデフォルトでEmulated Plugins でvim-airline 風にモード毎にstatusbar の色を変える事ができます。

## settings.json

コマンドパレット開く(⌘P) > settings.json 検索 > settings.json に下記を記述

背景色と文字色の指定は私が大好きなtheme のIcebarg に合わせていますのでお好みでどうぞ！

https://github.com/cocopon/vscode-iceberg-theme

```:settings.json
{
  "vim.statusBarColorControl": true,
  "vim.statusBarColors.normal": ["#161821", "#818596"],
  "vim.statusBarColors.insert": ["#84A0C6", "#161821"],
  "vim.statusBarColors.visual": ["#B4BE82", "#161821"],
  "vim.statusBarColors.visualline": ["#B4BE82", "#161821"],
  "vim.statusBarColors.visualblock": ["#B4BE82", "#161821"],
  "vim.statusBarColors.replace": ["#E2A478", "#161821"],
  "vim.statusBarColors.commandlineinprogress": ["#818596", "#161821"],
  "vim.statusBarColors.searchinprogressmode": ["#818596", "#161821"],
  "vim.statusBarColors.easymotionmode": ["#818596", "#161821"],
  "vim.statusBarColors.easymotioninputmode": ["#818596", "#161821"],
  "vim.statusBarColors.surroundinputmode": ["#818596", "#161821"],
}
```

## theme のstatusbar の文字色指定を無効にする

私の環境では上記のsettings.json の設定ではなぜか背景色しか変わらず、文字色が変わりませんでした。
試しにtheme をデフォルトに戻したところ、上手く背景色、文字色共に変化したのでtheme の文字色指定のみ無効にしました。

Users/user_name/⁨.vscode/⁨extensions⁩/⁨cocopon.iceberg-theme-1.0.1/themes/icebarg.color-theme.json を修正し無効化します。
コメントアウト、もしくは削除してください。

```:Users/user_name/⁨.vscode/⁨extensions⁩/⁨cocopon.iceberg-theme-1.0.1/themes/icebarg.color-theme.json 
.
.
"statusBar.background": "#0f1117",
"statusBar.debuggingBackground": "#242940",
"statusBar.debuggingForeground": "#6b7089", <- ココ
"statusBar.foreground": "#6b7089", <- ココ
"statusBar.noFolderBackground": "#0f1117",
"statusBar.noFolderForeground": "#6b7089", <- ココ
"statusBarItem.hoverBackground": "#6b708920",
.    
.
```

上記の設定に変更後、settings.json のstatusbar の文字色指定が効くようになるはずです。

## 注意点.1

settings.json を開いた状態だと挙動がおかしくなるので設定を確認する際には一度settings.json を閉じて確認してください。
これで私はかなりハマりました。

## 注意点.2

vscode のtheme の仕様なのか分かりませんがsettings.json に`workbench.colorCustomizations` という設定が自動生成されます。
何度削除してもコメントアウトしても復活してきます笑

```:settings.json
"workbench.colorCustomizations": {
"statusBar.background": "#B4BE82",
"statusBar.noFolderBackground": "#B4BE82",
"statusBar.debuggingBackground": "#B4BE82",
"statusBar.foreground": "#161821"
```

ちなみにモードを切り替えるとココのカラーコードも自動で変化します。
原因は分かりませんが、とりあえず無視して大丈夫だと思います。

# まとめ

かなり強引な方法ですがvim-airline 風にstatusbar の色を変化させる事ができました。

Insertモード
<img width="1280" alt="insert_ok.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/7940aa43-1ab7-3f1b-ea7a-c1e596034dba.png">

Visualモード
<img width="1280" alt="visual_ok.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/3b447f38-962d-5e6c-250e-2dcc5c303bc6.png">

Replaceモード
<img width="1280" alt="replace_ok.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377207/37dcebf9-52f6-a1e2-b709-dbdedb8f820b.png">


正式な方法じゃない可能性が高いので、もっと良い方法があれば是非教えてください！