2017-02-21

tobijibu

zshのプロンプトを変更する

私が普段利用しているシェルはzshですが、デフォルトのプロンプトは物足りません。

zshにはプロンプトのテーマ機能がありますので、簡単に変更できるのですが、装飾が派手なものが多く、シンプルなものが少ないです。中でもシンプルなsorinを使っていましたが、変更したいなぁと思ったので変更してみました。

PROMPTの設定

プロンプトは.zshrcPROMPTRPOMPTを定義して設定します。PROMPTは左側に表示される部分で、RPOMPTは右端に表示される部分です。

PROMPT=$'[%{$fg[yellow]%}%*%{$reset_color%}]:%{$fg[green]%}%~%{$reset_color%}
`command_status_check $?`:$ '
RPROMPT=$'%~'

[%{$fg[yellow]%}%*%{$reset_color%}]は、黄色の文字で[hh:mm:ss]と表示する設定です。%{$fg[yellow]%}は、以降の文字を黄色で表示するという指定です。{}の前には%を付けて$fg[yellow]を囲ってください。

%*は時間です。%{$reset_color%}では、指定した文字色をリセットします。これで[hh:mm:ss]の時間部分だけが黄色で指定されます。


%{$fg[green]%}%~%{$reset_color%}は、緑色の文字でカレントディレクトリのパスを表示する設定です。%{$fg[green]%}では先程と同じように文字の色を指定しています。

%~ではカレントディレクトリのパスを表示する指定です。その後に、先程と同じように%{$reset_color%}を指定して緑色の文字色指定をリセットします。

改行して、`command_status_check $?`:$を指定しています。`command_status_check $?`ではオリジナルの関数を実行します。関数は後ほど説明します。ここでは最後に実行したコマンドの結果を関数に渡して、その結果表示しています。

最後にここまでの設定を$''で囲みます。

プロンプト内で呼び出す関数

command_status_checkについて説明します。

function command_status_check {
    local color kao suffix
    suffix='%{'${reset_color}'%}'
    if [ $1 = 0 ]
    then
        color='%{'${fg[cyan]}'%}'
        kao="(*'-')"
    else
        color='%{'${fg[magenta]}'%}'
        kao="(*-~-)"
    fi
    echo ${color}${kao}${suffix}
}

この関数内では、最後に実行したコマンドの結果に応じて、顔文字の出し分け処理をしています。関数を呼び出している箇所で$?としてコマンドの終了ステータスを渡しています。この値は$1として使うことができますので、この値を使って判定します。文字色の設定と、文字色のリセットは先程と同じ方法で設定しています。

実行コマンドが存在しない場合の表示

zshにはcommand_not_found_handlerという特殊関数が用意されています。この関数を利用すると、コマンドが存在しない場合にのメッセージを変更することができます。

function command_not_found_handler {
    echo "${fg[blue]}(*'-\`)$reset_color ${fg[red]}$0$reset_color なんて知らないよ〜"
    return 127
}

顔文字の設定箇所は今までと同じように設定しています。${fg[red]}$0$reset_colorでは、$0を使って、実行した"存在しない"コマンドを表示します。


おつかれさまです。これでプロンプトの設定が完了です。自分なりのプロンプトを設定してみてはいかがでしょうか。

今回説明で利用したソースはこちらにあります。

参考サイト

zshプロンプトの設定について
http://qiita.com/yamagen0915/items/77fb78d9c73369c784da

終了ステータスの取得について
http://itchyny.hatenablog.com/entry/20110629/1309355617

zshのcommand_not_found_handlerについて
http://qiita.com/yamagen0915/items/77fb78d9c73369c784da