fishのプロンプトの右側をカスタマイズして、gitのブランチとstatusを表示させる

## やりたいこと
zshをやめて、fishを使い始めました。

zshを使っていたときに、下のような形でカレントディレクトリの右側にgitのブランチとstatusを出す設定をしていました。

[stagingに追加されていないファイルがある状態]
![スクリーンショット 2017-06-07 13.16.31.png](https://qiita-image-store.s3.amazonaws.com/0/133879/61ceea17-4321-0fa6-aa24-62fbf34635d6.png)

[git addされている状態]
![スクリーンショット 2017-06-07 13.13.29.png](https://qiita-image-store.s3.amazonaws.com/0/133879/643661a7-5514-5f11-1741-200e3dd94043.png)

[commitされている状態]
![スクリーンショット 2017-06-07 13.16.22.png](https://qiita-image-store.s3.amazonaws.com/0/133879/e7940578-d298-6ce9-c9d6-fd5a8a950f95.png)


便利に使っていたので、fishでも同じような感じにしたいと思いました。

また、fishのプロンプトはデフォルトでかわいいのがあるので、それを使いつつgitのブランチとstatusを右側に出すようにしたいと思いました。


## ブラウザからプロンプトを設定する
```
$ fish_config
```
ブラウザが起動してぽちぽち設定できるので、好きなものを選びます。
わたしはこれにしました(水色が好き)。
![スクリーンショット 2017-06-07 13.19.33.png](https://qiita-image-store.s3.amazonaws.com/0/133879/4d552e36-3386-1268-1059-aea4ba146ce5.png)

## gitのブランチとstatusを表示する
fishの基本設定ファイルは`~/.config/fish/config.fish`です。
上記ファイルに書き込んでも設定は反映されますが、プロンプトの設定は関数に分けて`~/.config/fish/functions/fish_prompt.fish`に書くことが推奨されています。

`fish_config`コマンドを打ってブラウザからプロンプトを設定すると、以下のようなファイルが生成されて内容が書き込まれています。

```:~/.config/fish/functions/fish_prompt.fish
function fish_prompt
	test $SSH_TTY
    and printf (set_color red)$USER(set_color brwhite)'@'(set_color yellow)(prompt_hostname)' '
    test $USER = 'root'
    and echo (set_color red)"#"

    # Main
    echo -n (set_color cyan)(prompt_pwd) (set_color red)'❯'(set_color yellow)'❯'(set_color green)'❯ '
end
```

この二つのファイルを使って、gitのブランチとstatusの設定を追記してみます。

ちょっと古い記事ですが記号を使ったかわいい設定を公開してくださっている方がいたので、使うことにします。
[Git Information in Fish Shell’s　Prompt](https://www.martinklepsch.org/posts/git-prompt-for-fish-shell.html)

```~/.config/fish/config.fish
# Fish git prompt
set __fish_git_prompt_showdirtystate 'yes'
set __fish_git_prompt_showstashstate 'yes'
set __fish_git_prompt_showuntrackedfiles 'yes'
set __fish_git_prompt_showupstream 'yes'
set __fish_git_prompt_color_branch yellow
set __fish_git_prompt_color_upstream_ahead green
set __fish_git_prompt_color_upstream_behind red

# Status Chars
set __fish_git_prompt_char_dirtystate '⚡'
set __fish_git_prompt_char_stagedstate '→'
set __fish_git_prompt_char_untrackedfiles '☡'
set __fish_git_prompt_char_stashstate '↩'
set __fish_git_prompt_char_upstream_ahead '+'
set __fish_git_prompt_char_upstream_behind '-'
```

```:~/.config/fish/functions/fish_prompt.fish
function fish_prompt
    test $SSH_TTY
    and printf (set_color red)$USER(set_color brwhite)'@'(set_color yellow)(prompt_hostname)' '
    test $USER = 'root'
    and echo (set_color red)"#"

    # Main
    echo -n (set_color cyan)(prompt_pwd) (set_color red)'❯'(set_color yellow)'❯'(set_color green)'❯ '

    # Git
    set last_status $status
    printf '%s ' (__fish_git_prompt)
    set_color normal
end
```

これを保存して適用させると、以下のような表示になります。

[stagingに追加されていないファイルがある状態]
<img width="256" alt="スクリーンショット 2017-07-26 11.11.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/133879/fd1f4497-c7c2-8314-4dd5-97de7a43aa28.png">

[git addされている状態]
<img width="257" alt="スクリーンショット 2017-07-26 11.11.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/133879/bc8bc343-1fbb-492b-6206-d4311774e691.png">

[commitされているがpushされていない状態]
<img width="244" alt="スクリーンショット 2017-07-26 11.13.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/133879/20c9071e-a9cb-082b-fd77-ed71ee3b09f6.png">

[クリーンな状態]
<img width="247" alt="スクリーンショット 2017-07-26 11.12.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/133879/48fbf437-9afa-863c-9b99-507950547e76.png">


他にもステータスに応じてわかりやすくてかわいい記号が出るので、便利に使っています。