超酷的 Zsh prompt

{撰文/Vern}

不仅美观而且实用的 Zsh 提示符,除了常见的主机名、用户名、路径名等标识符,它还能

  • jobs 提醒
  • 非 0 的 exit code 提示
  • 路径名右对齐

相关配置内容如下:

# get the colors  
autoload colors zsh/terminfo  
if [[ "$terminfo[colors]" -ge 8 ]]; then  
    colors  
fi  
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; do  
    eval C_$color='%{$terminfo[bold]$fg[${(L)color}]%}'  
    eval C_L_$color='%{$fg[${(L)color}]%}'  
done  
C_OFF="%{$terminfo[sgr0]%}"

# set the prompt  
set_prompt() {  
    mypath="$C_OFF$C_L_GREEN%~"  
    myjobs=()  
    for a (${(k)jobstates}) {  
        j=$jobstates[$a];i="${${(@s,:,)j}[2]}"  
        myjobs+=($a${i//[^+-]/})  
    }  
    myjobs=${(j:,:)myjobs}  
    ((MAXMID=$COLUMNS / 2)) # truncate to this value  
    RPS1="$RPSL$C_L_GREEN%$MAXMID<...<$mypath$RPSR"  
    rehash  
}  
RPSL=$'$C_OFF'  
RPSR=$'$C_OFF$C_L_RED%(0?.$C_L_GREEN. (%?%))$C_OFF'  
RPS2='%^'

# load prompt functions  
setopt promptsubst  
unsetopt transient_rprompt # leave the pwd

precmd() {  
    set_prompt  
    print -Pn "\e]0;%n@$__IP:%l\a"  
}  
PS1=$'$C_L_BLUE%(1j.[$myjobs]% $C_OFF
.$C_OFF)%m.%B%n%b$C_OFF$C_L_RED%#$C_OFF'  

注意:上面 22 行中的 < 被自动转义成了 <,请自行替换。

{ via Miek.nl }

Read More: