お前らのターミナルは可愛くない

ターミナルは、毎日向き合うものです。
そのターミナルが味気ないものであると、毎日も味気なくなります。


ということで、ターミナルを可愛くしましょう。 

## zshのプロンプト変数について

zshには、`PROMPT`と`RPROMPT`という２つのプロンプト変数を持っています。
PROMPTが左、RPROMPTが右のプロンプトの内容を定義するものです。

```
$ PROMPT="人の金で焼き肉が食べたい！！ "
```
こうコマンドを打とうものなら、ターミナルが欲望に溢れたものとなります。
![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/c700cfb5-2a4f-0e99-55dd-cff51e7a007a.png)

もうなにがなんだか、わかりません。

## 色・状態変数

プロンプト変数の中では、表示される時の色を指定できる特殊な記法があります。

文字色の場合は`%F{}`の中に、背景色の場合は`%K{}`の中にカラーネームを入力します。
色のリセットをしたい場合は、`%k`、`%f`を使います。
また、`%~`を使うことで、カレントディレクトリのパスを取得できます。

以下のようにコマンドを打ちます。

```
$ PROMPT="%K{black}%F{red}人の%F{yellow}金で%F{orange}焼き%F{blue}肉が%F{white}食べ%F{green}たい！！ %~ "
```

こうなります。

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/d9ff6e8b-c78f-b317-71c4-2bde1c2062de.png)

## RPROMPTについて

RPROMPTは、右側のプロンプトです。文字をRPROMPTにぶつかるまで入力し続けると、自動で消える便利な性質があります。
また、最新の行にしか表示されません。

```
$ PROMPT="%K{black}%F{red}人の%F{yellow}金で%F{orange}焼き%F{blue}肉が %~ "
$ RPROMPT="%F{black}%K{white}食%K{yellow}べ%K{green}た%K{red}い%K{blue}！！"
```

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/2b096afa-6cc6-705b-d4ca-c9e4a1d05642.png)

## SSHしているときに表示

以下をzshrcに追記します。

```zsh
if [[ -n "${REMOTEHOST}${SSH_CONNECTION}" ]];then
  ISSSH="%K{yellow}%F{black}SSH %k%f"
fi

PROMPT="%K{black}${ISSSH}%F{red}人の%F{yellow}金で%F{orange}焼き%F{blue}肉が %~ "
RPROMPT="%F{black}%K{white}食%K{yellow}べ%K{green}た%K{red}い%K{blue}！！"
```

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/9bf98f92-2207-cde8-7368-df3dc0398af1.png)

## rootのときに表示

```zsh
if [ ${UID} -eq 0 ]; then
  ISROOT="%K{red}%F{black}ROOT %k%f"
fi

PROMPT="%K{black}${ISROOT}%F{red}人の%F{yellow}金で%F{orange}焼き%F{blue}肉が %~ "
RPROMPT="%F{black}%K{white}食%K{yellow}べ%K{green}た%K{red}い%K{blue}！！"
```

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/9336ae3d-406a-03e3-69fe-e9e7dbc54def.png)

## gitブランチを表示させる

zshrcに以下のように追記します。
( http://d.hatena.ne.jp/holidays-l/20100323/p1 を参考)

```zsh
preexec() {
  _pre="$1"
}
precmd(){
        _r=$?
        case "${_pre}"  in
                cd*|git*|vi*|:)
                        vcs_info
                ;;
        esac
        _pre=""

        return ${_r}
}
        setopt prompt_subst
        zstyle ':vcs_info:*' enable git
        zstyle ':vcs_info:git:*' check-for-changes true
        zstyle ':vcs_info:git:*' stagedstr "%K{yellow}"
        zstyle ':vcs_info:git:*' unstagedstr "%K{red}"
        zstyle ':vcs_info:*' formats "%K{green}%F{white}%c%u[%b]%f"
        zstyle ':vcs_info:*' actionformats '[%b|%a]'
        vcs_info

PROMPT="%K{black}${ISROOT}%F{red}人の%F{yellow}金で%F{orange}焼き%F{blue}肉が %~ "
RPROMPT="%f%b%k${vcs_info_msg_0_}%F{black}%K{white}食%K{yellow}べ%K{green}た%K{red}い%K{blue}！！"

```

初回と、gitコマンドの実行直後、cdの実行後、vi実行後のみ、現在のブランチ名とファイルの状態を更新・取得します。
赤がステージングに編集したファイルが残っている場合は赤、git addすると黄色、git commitすると緑になります。

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/231eb40d-e3a8-80c3-179e-b0c046203289.png)


## 可愛くする

以下のように、「うー」、と「にゃー」の顔文字を色付きで追加します。

```
# 略
        zstyle ':vcs_info:git:*' stagedstr "%K{white}%F{yellow}" # %c
        zstyle ':vcs_info:git:*' unstagedstr "%K{white}%F{red}"  # %u
        zstyle ':vcs_info:*' formats "%K{black}%F{white}%F{green}%K{white}%c%u[%b]%f"
# 略

UUU="%K{white}%F{black}（」・ω・）」うー"
NYA="\（・ω・\）にゃー！"
PROMPT="${UUU} %K{blue}%F{white} %F{black}%~ %k%F{blue}%f "
RPROMPT='%f%b%k${vcs_info_msg_0_}%F{black}%K{white}%F{white}%K{black} ${NYA} %f'
```

![k.png](https://qiita-image-store.s3.amazonaws.com/0/154157/a6d7a1bf-9508-b77d-f136-0405020863dc.png)


これが普段の僕のプロンプトです。

## 最後に

ニャル子さんかわいい！！！！！！！