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


当前回答

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

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

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

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

其他回答

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

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

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

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

为了补充上述所有答案,另一个方便的技巧是将彩色提示设置放入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

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

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

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

把这个放到~/.zshrc:

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

支持颜色: 红色,蓝色,绿色,青色,黄色,品红,黑色和白色(从这个答案),尽管不同的计算机可能有不同的有效选项。

用%{....%}包围颜色代码(以及任何其他不可打印的字符)。这是为了让文本换行正确工作。

此外,下面是如何让它与这里的目录修剪一起工作。

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "

Debian/Ubuntu/树莓派操作系统风格bash提示符:

autoload -U colors && colors
PS1="%B%F{034}%n@%m%f%b:%B%F{019}%~ %#%f%b "

不完全确定自动加载-U颜色和&颜色是必要的,但我确实需要它当我使用$fg[…]]而不是%F{…}。 在我的例子中;

%F(% F)开始(停止)前景色-我已经使用了256COLOR值,但你也可以使用十六进制,例如,我已经使用了正常的绿色%F{034},但%F{#00aa00}也适用 %B(% B)开始(停止)加粗 % n $用户名 %m短的机器名 %~登录/工作目录,如果~在主目录 如果是正常用户,则显示%#

编辑:在macOS大苏尔,蒙特雷和文图拉测试。不确定早期的zsh版本,但Ventura 13.0是zsh 5.8.1 (x86_64-apple-darwin22.0)