为了更好地识别命令行输出的开始和结束,我想改变提示符的颜色,使其与程序输出明显不同。当我使用zsh时,有人能给我一个提示吗?


当前回答

man zshall和搜索PROMPT EXPANSION

在阅读了这里现有的答案后,其中一些答案是相互矛盾的。我在运行zsh 4.2和5+的系统上尝试了各种方法,发现这些答案相互冲突的原因是它们没有说明它们针对的是哪个zsh版本。不同的版本使用不同的语法,其中一些需要各种自动加载。

So, the best bet is probably to man zshall and search for PROMPT EXPANSION to find out all the rules for your particular installation of zsh. Note in the comments, things like "I use Ubuntu 11.04 or 10.4 or OSX" Are not very meaningful as it's unclear which version of ZSH you are using. Ubuntu 11.04 does not imply a newer version of ZSH than ubuntu 10.04. There may be any number of reasons that an older version was installed. For that matter a newer version of ZSH does not imply which syntax to use without knowing which version of ZSH it is.

其他回答

我不认为自动加载-U颜色和&颜色是需要的了,你可以简单地做:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

以达到与FireDude的答案相同的结果。有关更多信息,请参阅ZSH文档。

下面是一个设置红色提示符的例子:

PS1=$'\e[0;31m$ \e[0m'

神奇的是\e[0;31m(打开红色前景)和\e[0m(关闭字符属性)。这些被称为转义序列。不同的转义序列会给出不同的结果,从绝对光标定位到颜色,再到能够更改窗口的标题栏,等等。

有关转义序列的更多信息,请参阅维基百科关于ANSI转义码的条目

要根据最后一个命令的退出状态获得颜色提示符,您可以使用以下命令:

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

只需将这一行添加到~/.zshrc。

文档列出了可能的占位符。

我发现,用zsh5 (Debian Jessie上的默认值),所有这些解决方案都有效:

“\ e[00美元 fg美元(白色) 美元fg{白}

现在,他们有一个问题:他们会移动光标,导致在标签(自动完成)时难看的贴花。解决方案是简单地用%{FOOBAR%}包围转义序列。我花了好长时间才想明白。 对于第二和第三个解决方案加载颜色模块是强制性的。 为了保持第一个解决方案的可读性,只需为所使用的颜色定义变量。

为了补充上述所有答案,另一个方便的技巧是将彩色提示设置放入zsh函数中。在那里你可以定义局部变量来别名较长的命令,例如rc=$reset_color或定义你自己的颜色变量。不要忘记把它放在你的.zshrc文件中,并调用你已经定义的函数:

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt