VSCodeでVimをはじめてから半年間くらいたった体験記と設定など

## 挨拶
はじめまして、11月にABEJAの情シスに入社した世古です。
この記事はhttps://qiita.com/advent-calendar/2021/abeja の7日目の記事です。

入社したばかりでまだまだ社内のフローを覚えることも山ほどありますが、社内でお誘いいただきアドベントカレンダーに参加することにしました。
テーマは迷いましたがここ1年くらいで開発する上で一番やってよかった習慣がVimだったのでそれにしました。

## なぜVimを学ぼうと思ったのか
もともとMacの標準機能でCtrl+FとかDなどで矢印キー使わないポリシーで開発していたのですが、
何か、もう少し、楽にならないもんかなぁ？と思っていた時に、プログラミング初学者の時に秒で挫折したVimが頭をよぎりました。
そんなこんなで色々調べていると、メルペイの方の[開発ライブ実況](https://www.youtube.com/watch?v=cWvAhmfZJZg)でVim無双しているのをみてこれはヤバいなと思ってはじめました。
しかし、いきなりガチのVimエディターはハードル高そうだったのでVSCodeのプラグインでVimやらせてもらうことしました。
VSCode自体の入力補完やスニペットや他のプラグインとの連携など併せて利用できるのでこれだけでも十分でした。

## Vimを習得するメリット
- 単純に開発が速くなる
- カーソルがある程度脳のイメージ通り動くので気持ちいい
- とにかくかっこいい

## デメリット
- Vimキーバインドが設定されていないエディターだとちょっと嫌な気持ちになる
- Notionとか他のアプリでもVimコマンド使ってしまって変な文字打ってる
- 習得が面倒(慣れたら最高になります)

## 慣れるまでの期間
だいたい3週間くらいでだいぶ自然に使えるようになったかと思います。
はやめに習得したいので3つのルールを課せました
- なるべくマウスは使わない(ちょっと遠くに置いとく)
- コマンドを忘れたら作業を止めてでもコマンドを調べる
- やりたいことを最短で実現するコマンドを常に考えながら作業する

初日〜5日
本当にやりたいことが何一つできないし、消したらいけない文字消してしまったり、
コピペできないし(設定したらできるようになります)、かなり重めの足枷をつけられているような気持ちでした。
練習していたのは主にキーカーソル移動系と削除とコピペなどでした。

6日から14日
カーソル移動や簡単なキー操作はマスターしたので、他のキーも積極的に使い始める。
このあたりから毎朝今日覚えるキーを決めて無理やり使って体に染み込ませてました。
体感としてはこの頃には、Vim始める前と同じくらいの作業速度になったと思います。
大きな移動やVisualモードというものを意識的に使っていたと思います。
`shift+V $ %`で関数とか括弧で括られたブロックを全て選択など覚えて感動したりしてました。

15日から３週間経つころ
この頃から思考した通りカーソル動かしたり出来るようになったきがしました。
明らかにVim以前よりも作業速度が格段に上がっていたし、Vimを覚えなきゃとか訓練している感覚は一切なくなったと思いました。

それ以降は特別大きな変化はないので意識して使っていればだいたいそれくらいで身体が覚えるのかなと思いました。

### 半年使ってみて
個人的に行っている開発ではかなり重宝しているし、情シスでこれからGASを書くこと増えそうなので、ClaspとTypeScriptで安全にコードかけるのと、開発速度を上げることで別のことに時間使えるので結果的に習得しておいてよかったと言えます。
最初は地獄ですが時間対効果も高いと思うのでライトにプログラミングやってる方にもおすすめできるかとも思います。


最後に簡単にですが、導入方法と私が使っている設定と書いておきます。

## おまけ

### 導入
VSCodeのプラグイン検索で`Vim`と打てば一番最初に出てくると思います。
![Screen Shot 2021-12-07 at 6.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498998/991f1a71-aca3-0ef6-d793-e6a737f4cfbd.png)
[提供元](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim)

### 設定
VSCode Vimでは`settings.json`に好きな設定を書いていきます。


この実際に僕が使っている設定となりますが、この辺りは標準的な設定かもしれないです。

```
"vim.leader": "<space>",
"vim.useSystemClipboard":true, // クリップボードを共有するものこれが一番大事な気がします。
"vim.hlsearch": true,
"vim.easymotion":true,
"vim.easymotionKeys": "sdfghjkl",
"vim.visualstar": true,
"terminal.integrated.tabs.enabled": true
```

VimではないですがVim利用に伴いVSCodeのショートカットも変更しました。
これは`keybinding.json`に記述します。

この設定によって以下の処理がキーボードから手を離さずに行えるようになります。

- クラスや関数の宣言箇所へ移動
- 実装箇所
- エディターのタブの左右移動
- エディターとターミナルの移動



```
[     // 実装箇所へ移動
      {
        "key": "ctrl+w ctrl+i",
        "command": "editor.action.goToImplementation",
        "when": "editorFocus"
      },
       // 宣言箇所へ移動
      {
        "key": "ctrl+w ctrl+d",
        "command": "editor.action.goToDeclaration",
        "when": "editorFocus"
      },
      // 左のタブへ移動
      {
        "key": "ctrl+w ctrl+h",
        "command": "workbench.action.previousEditor",
        "when": "editorFocus"
      },
			// 右のタブへ移動
      {
        "key": "ctrl+w ctrl+l",
        "command": "workbench.action.nextEditor",
        "when": "editorFocus && vim.mode == 'Normal'"
      },
    //----------------------------------------------------------
    // vscodeのeditorとterminal切り替え
    //----------------------------------------------------------
     {
      "key":"ctrl+;",
      "command": "workbench.action.terminal.focus",
      "when": "editorTextFocus"
    },
    {
      "key":"ctrl+;",
      "command": "workbench.action.focusFirstEditorGroup",
      "when": "terminalFocus"
    }
]
```
### 参考にしたもの
https://knowledge.sakura.ad.jp/21687

https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Vim-%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86%EF%BC%81-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E6%9B%B8%E7%B1%8D-%EF%BC%A4%EF%BD%92%EF%BD%85%EF%BD%97-%EF%BC%AE%EF%BD%85%EF%BD%89%EF%BD%8C-ebook/dp/B00HWLJI3U