超酷的 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 行中的 < 被自动转义成了 &lt;,请自行替换。

{ via Miek.nl }

Read More:

12 Comments

  1. 1 Iven Commented @ 2009-05-04 19:45Reply to this comment

    呵呵,没有截图啊……

  2. 2 vern Commented @ 2009-05-04 20:02Reply to this comment

    无图无真相^_^ http://s5unty.blogspot.com/2009/05/zsh-prompt.html

  3. 3 fangvv Commented @ 2009-05-04 20:12Reply to this comment

    Zsh用的少....

  4. 4 lqs Commented @ 2009-05-04 20:33Reply to this comment

    小于号被搞成 < 了

  5. 5 iveney Commented @ 2009-05-04 20:42Reply to this comment

    我在想右邊那個PWD提示太長後會有什麽後果?

  6. 6 Ian Yang Commented @ 2009-05-04 21:47Reply to this comment

    @iveney: 右边不够显示会自动隐藏,输入到达右边时,右边提示也会隐藏

  7. 7 ati3200 Commented @ 2009-05-04 22:22Reply to this comment

    能告诉如何使用吗?thx

  8. 8 Sutra Commented @ 2009-05-04 22:24Reply to this comment

    比较不喜欢vi等退出后,缓冲区的内容从屏幕消失,不知道怎么配置。Mac和Linux下默认都是那样。

  9. 9 山猫 Commented @ 2009-05-05 0:04Reply to this comment

    @Sutra: 最简单的是改用命令

    TERM=linux vim

    来启动 vim

  10. 10 secretzero Commented @ 2009-05-05 1:53Reply to this comment

    怎么用啊?

  11. 11 sbelieve Commented @ 2009-05-05 9:46Reply to this comment

    @Sutra: 默认的 echo $PAGER='less -r' 那个-r是清屏的作用

  12. 12 zhuqin Commented @ 2009-05-05 12:37Reply to this comment

    <...&lt 这啥?