我怎样才能改变我的提示在zsh(不同于普通文本)的颜色?

为了更好地识别命令行输出的开始和结束,我想更改提示的颜色,以便与程序输出明显不同。 当我使用zsh,任何人都可以给我一个提示?

以下是一个如何设置红色提示的例子:

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

魔术是\e[0;31m (打开红色前景)和\e[0m (closures字符属性)。 这些被称为转义序列。 不同的转义序列为您提供了不同的结果,从绝对光标定位,颜色到能够更改窗口的标题栏等等。

有关转义序列的更多信息,请参阅ANSI转义代码上的wikipedia条目

把这个放在~/.zshrc

 autoload -U colors && colors PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% " 

支持的颜色:
红色,蓝色,绿色,青色,黄色,洋红色,黑色和白色(从这个答案 ),虽然不同的电脑可能有不同的有效选项。

使用%{....%}环绕颜色代码(以及任何其他不可打印的字符)。 这是文字换行正确工作。

Zsh内置了彩色提示。 尝试

 autoload -U promptinit && promptinit 

然后prompt -l列出可用的提示, -p fire预览“消防”提示, -s fire设置它。

当你准备添加一个提示时,在上面的自动加载行的下面添加如下内容:

 prompt fade red 

我不认为autoload -U colors && colors是需要了,可以简单地做:

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

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

我发现,使用zsh5(Debian Jessie上的默认版本),所有这些解决scheme的工作原理:

  • $'\e[00m
  • $fg[white]
  • $fg{white}

现在,他们有一个问题:他们将移动光标,导致在标签(用于自动完成)时产生丑陋的贴花。 解决方法只是用%{FOOBAR%}包围转义序列。 花了我一会儿来解决这个问题。 对于第二和第三种解决scheme,加载colors模块是强制性的 为了保持第一个解决scheme的可读性,只需为您使用的颜色定义variables。

man zshall并寻找提升扩展

在阅读了现有的答案之后,其中有几个是相互矛盾的。 我已经尝试了运行zsh 4.2和5+的系统上的各种方法,并发现这些答案是相互冲突的原因是他们没有说他们的目标是哪个版本的ZSH。 不同的版本使用不同的语法,其中一些需要各种自动装载。

所以,最好的办法是让man zshall和searchPROMPT EXPANSION来找出你的特定安装zsh的所有规则。 请注意,诸如“我使用Ubuntu 11.04或10.4或OSX”之类的东西不是很有意义,因为您不清楚您正在使用哪个版本的ZSH。 Ubuntu 11.04并不意味着ZSH的新版本比Ubuntu 10.04更新。 可能有许多原因,旧版本安装。 对于这个问题,ZSH的新版本并不意味着在不知道哪个版本的ZSH的情况下使用哪种语法。