私が普段利用しているシェルはzshですが、デフォルトのプロンプトは物足りません。
zshにはプロンプトのテーマ機能がありますので、簡単に変更できるのですが、装飾が派手なものが多く、シンプルなものが少ないです。中でもシンプルなsorinを使っていましたが、変更したいなぁと思ったので変更してみました。
PROMPTの設定
プロンプトは.zshrc
にPROMPT
とRPOMPT
を定義して設定します。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