我如何改变我的提示在zsh的颜色(不同于正常的文本)?

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

273455 次浏览

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

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

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

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

把这个放在~/.zshrc中:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "
支持颜色:< p > < br > redblue green, cyanyellow magenta, black,,white (from 这个答案),尽管不同的计算机可能有不同的有效选项

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

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

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

Zsh自带彩色提示。试一试

autoload -U promptinit && promptinit

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

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

prompt fade red

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

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

来实现与FireDude的回答相同的结果。更多信息请参见ZSH文档

man zshall和搜索PROMPT EXPANSION

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

因此,最好的方法可能是man zshall并搜索PROMPT EXPANSION,以找出用于特定安装zsh的所有规则。请注意,在评论中,像“我使用Ubuntu 11.04或10.4或OSX”这样的东西没有什么意义,因为不清楚你使用的是哪个版本的ZSH。Ubuntu 11.04并不意味着ZSH的版本比Ubuntu 10.04更新。安装旧版本可能有很多原因。因此,一个较新的ZSH版本并不意味着在不知道它是哪个ZSH版本的情况下使用哪种语法。

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

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

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

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

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

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

布莱恩·奥克利上面的答案有一个故障,因为它已经指出了,安德鲁·马歇尔提供的解决方案,虽然它没有携带故障,但它并没有使它对使用的颜色进行过多的定制。

由于macOS Catalina要求从现在开始将zsh作为默认shell,我认为更多的人可能想要自定义他们的提示符,并可能会来这里寻求答案。因此,我想我将尝试给出一个更广泛的总结,并触及其他非常密切相关的概念,允许更多的定制。

3-Digit code for各种颜色。 首先,我们可以在这里找到各种颜色的3位代码:https://unix.stackexchange.com/a/124409/194343。 例如,214是某种橙色

前景和背景 另一个关键信息是,对于__abco0oreground和bacKground颜色,可以分别用FK定义它们想要的颜色。来源是zsh的视觉效果手册:http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

例如,下面两个命令

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

显示带有黑色背景的橙色主机名,后面是带有黑色背景的白色冒号,后面是带有黑色背景的亮蓝色当前工作目录,然后是带有黑色背景的白色美元符号。

更多相关信息见下文。

例如,添加时间戳。看到https://superuser.com/a/1251045/290299。当然,这可以用颜色编码,例如用一些浅蓝色/略带紫色,像这样:

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

例如,在阅读ls的手册后,可以使用以下两个命令激活ls的颜色:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

最后,作为最后的评论,我没有测试,因为我对我的配置很满意,另一种方法可能是让某人从MacPorts安装端口coreutils,然后使用gdircolors(来源:https://unix.stackexchange.com/a/174596/194343)。(我可能会在将来编辑最后一部分,因为上面所有的文章都是相关的,让日常生活更有趣,更容易应付。)

为了补充上述所有答案,另一个方便的技巧是将彩色提示设置放入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
试试我最喜欢的: 在< / p >
~/.zshrc

这条线:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

不要忘记

source ~/.zshrc

为了测试更改

当然,你可以改变颜色/颜色代码:-)

为了不浪费终端中特殊字符对信息片段的空间,可以使用多种颜色来区分信息。

如。为了达到这个理想的效果:

Desired Outcome

您可以对提示符执行以下操作:

PROMPT='%F{magenta}${PWD/#$HOME/~} %F{green}${vcs_info_msg_0_} %F{cyan}$%F{reset_color} '

它的工作方式是每次你使用$F{myColor}设置一个颜色时,从那一点开始的颜色将保持不变。在结尾添加%{reset_color}是很重要的,这样输入的文本就会回到原来的颜色(或者你可以把它设置成其他颜色)。

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

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

截图

不完全确定autoload -U colors && colors是否必要,但当我使用$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)