zsh的
试试这个:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
这是提示的细分:
- PROMPT_SUBST在提示符中打开命令替换(以及参数扩展和算术扩展)
%{...%}
- 逃脱序列
$(pwd|grep --color=always /)
- 打印当前目录并突出显示 /
- 颜色取决于$ GREP_COLORS环境变量(或其默认值) - 粗体红色是默认值
%${#PWD}G
- 使用当前目录名称的字符长度作为毛刺值。这使得shell认为这是前面字符序列的长度(在“ %{
“)而不是包含ANSI转义序列的字符串的实际长度。这使shell不会混淆光标相对于提示结尾的位置。
- - - - - - - 这是回答你问题的部分的结尾 - - - - - - -
%(!.%F{red}.%F{cyan})
- 如果这是特权shell(root),则将前景色设置为红色,否则设置为青色
%n
- 输出用户名
%f
- 将前景色重置为默认值
@
- 符号的文字
%F{yellow}
- 使前景色变黄
%m
- 输出主机名
%f
- 将前景色重置为默认值
%(!.%F{red}.)
- 如果这是特权shell(root),则将前景色设置为红色
%#
- 输出一个 #
对于特权shell或 %
对于没有特权的人
%f
- 将前景色重置为默认值
我把这条路径放在这个提示中,以便强调,因为这个问题与路径有关。
这是zsh的一个版本,它通过操作来改变斜杠颜色,具体取决于你是否是root(特权) $GREP_COLORS
变量:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
巴什
您可以在Bash中执行类似的提示。在这个例子中,我把用户和主机名放在第一位,当UID为0时,斜杠的颜色也会改变。警告:这会覆盖Bash的 $PS1
提示变量。这不应该是一个问题,除非你正在做一些特殊的事情,或者你希望在直接设置该变量时这种行为发生变化,这是有效的。此外,这使用一个名为“ usercolor
“这可能与其他东西发生碰撞,虽然整个事情可以放在一个函数中,变量声明为local。
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
我利用了Bash没有zsh的“毛刺”功能来使用参数扩展替换来有条件地为斜线着色(而不是使用grep)这一事实。