VimでGitの環境を整える

Vimを使っててGitのプラグインを探してて、色々まとめました。

※　勘違いしていて全部gitgutterの機能だと思ってたんですけど、コメントでご指摘頂いて直しました:bow:

## とりあえずインストール

インストールするものは以下のものです。

- [airblade/vim-gitgutter](https://github.com/airblade/vim-gitgutter)
- [tpope/vim-fugitive](https://github.com/tpope/vim-fugitive)

僕はdeinを使っているので、インストールはこんな感じです。

```toml:dein.toml
[[plugins]]
repo = "airblade/vim-gitgutter"

[[plugins]]
repo = "tpope/vim-fugitive"
```

## vim-gitgutterの機能

### HEADからの差分を表示

インストールが済んだらGitで管理しているページを開いてください。
ページを開いて、適当に変更して保存すると以下のように行数の横に＋や−が表示出来ていると思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172408/076b5edc-7263-c2b3-2aa8-35d63506745c.png)

次の変更まで進みたいなら `]c`、前の変更に戻りたいなら `[c`で移動することが出来ます。
ショートカットを変更したいなら以下のコードをvimrcに加えてください。

```vimrc
nmap ]h <Plug>GitGutterNextHunk
nmap [h <Plug>GitGutterPrevHunk
```

## fugitiveの機能

### Glog

これは `git log`のコマンドですね。
ノーマルモードで `:Glog`を実行すると以下のような表示が出ます。
`::`の後ろは今は消してますが、コミットメッセージが表示されます。
これは単体ではあまり使えませんが次の `Gdiff`と組み合わせるとこで効果を発揮します。

```
fugitive:///~/.git//8f3032e5b4b02063e299d8be805d1d81738dc3c4/pages/index.vue::...
fugitive:///~/.git//03a7ecbcbf7f244b9fa031ff67e737823fb18dfb/pages/index.vue::...
fugitive:///~/.git//fae312dd5ff77dbb0e8e974c978f0e803b41796a/pages/index.vue::...
fugitive:///~/.git//2eac7fb5084fe094f20ebd51bbac08649d6e4b08/pages/index.vue::...
fugitive:///~/.git//54e42bdc3acece96f77731180249f9c552c5b124/pages/index.vue::...
fugitive:///~/.git//65d924c0cee3a034cbe03ad2cdeb0d5472fbaf9a/pages/index.vue::...
fugitive:///~/.git//c71cf6d87d123fcc3a4e625f52c535adcf361c16/pages/index.vue::...
fugitive:///~/.git//add95331805cb415d81ce14cfc98d344834a9a01/pages/index.vue::...
fugitive:///~/.git//8067e36a079e9871522a58a64ee02da699874cb3/pages/index.vue::...
fugitive:///~/.git//9e6d8ba9bcfe36266e89cffefcecd8b02d33dd34/pages/index.vue::...
fugitive:///~/.git//f90276408d13eca8c15a4766fcc77514e04a2ea2/pages/index.vue::...
```

また、 `:Glog --oneline`とすることによって以下のような短いバージョンの結果を得ることも出来ます！

```
8f3032e ...
03a7ecb ...
fae312d ...
2eac7fb ...
54e42bd ...
65d924c ...
c71cf6d ...
add9533 ...
8067e36 ...
9e6d8ba ...
f902764 ...
```


### Gdiff

これはgit diffのコマンドを行ってくれるコマンドです。
ノーマルモードで `:Gdiff`と実行すると以下のようにHEADの状態と現在の状態を比較することができます。
このコマンドを見ることで前の状態との変更を見ながらコーディング出来ます！

<img width="1440" alt="スクリーンショット 2018-07-09 13.06.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/172408/7cf1a39a-6677-bfd4-6373-3f30b2039c24.png">


また、HEADよりも前にさかのぼって確認したいときは `Glog`をつかって

```
:Gdiff コミット番号
```

のように書きます。コミット番号は上で言うと `8f3032e5b4b02063e299d8be805d1d81738dc3c4`の部分です。

### Gblame

このコマンドを実行すると以下のように誰によるいつどのコミットでの変更なのかを見ることが出来ます。
これは、複数人開発の時によくわからないコードがあった時に誰に聞けばいいかが分かるというとても便利な機能です！
下の画像では一人しかいませんが、、笑

<img width="1430" alt="スクリーンショット 2018-07-09 13.38.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/172408/c0282c4b-57db-b010-a639-9a681c62366e.png">


### Gbrowse

正直僕が一番紹介したいと思ってたのはこの機能です。
GitHubなど複数人での作業で、GitHub上でやり取りをするならこの機能はすごく便利だと思います。
ただし、この機能はもしGitHubを使っている場合は[vim-rhubarb](https://github.com/tpope/vim-rhubarb)が必要となります。

これはリポジトリがGitHubやGitlabなどにミラーされていることを推測し、現在のファイルをブラウザ内のオプションの行選択で開くことが出来ます。
開く方法は簡単でまず、Shift-Vで表示したい行を選択します。あとは `:Gbrowse`を入力し、開いたページのURLをGitHubのPull RequestやIssueに貼ると以下の画像のような結果が得られます。

<img width="691" alt="スクリーンショット 2018-07-09 13.32.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/172408/f51c0094-2ef4-3d5d-b88c-93a374340f0a.png">


## 終わりに

他にも便利なGitの機能がありましたら、コメントなどで教えてください！

## 参考

[15年目のVim](https://postd.cc/vim3/)