Zsh

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

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

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

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

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

$ PROMPT="人の金で焼き肉が食べたい!! "

こうコマンドを打とうものなら、ターミナルが欲望に溢れたものとなります。
k.png

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

色・状態変数

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

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

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

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

こうなります。

k.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

SSHしているときに表示

以下をzshrcに追記します。

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

rootのときに表示

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

gitブランチを表示させる

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

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

可愛くする

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

# 略
        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

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

最後に

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