175

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

4

12 回答 12

344

把这个放在~/.zshrc

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

支持的颜色:
red, blue, green, cyan, yellow, magenta, black, & white(来自这个答案)虽然不同的计算机可能有不同的有效选项。

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

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

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
于 2010-03-28T21:37:49.020 回答
92

Zsh 带有内置的彩色提示。尝试

autoload -U promptinit && promptinit

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

当您准备好添加提示时,在上面的自动加载行下方添加如下内容:

prompt fade red
于 2010-12-21T00:32:19.847 回答
74

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

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

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

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

于 2009-03-27T13:41:04.223 回答
39

上面 Bryan Oakley 的答案有一个小故障,正如已经指出的那样,而 Andrew Marshall 提供的解决方案虽然没有出现故障,但是对于所使用的颜色进行过多的定制,它并不明显。

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

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

前景和背景。 另一个关键信息是,对于F前景色和后K底色,可以分别用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 的手册后,例如可以ls使用以下两个命令激活颜色:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

最后,作为我没有测试的最后一句话,因为我对我的配置很满意,另一种途径可能是让某人coreutilsMacPorts安装端口然后使用gdircolors(来源:https ://unix.stackexchange.com/a/174596 /194343)。(我可能会在未来编辑这最后一部分,因为以上所有内容都是相关的,让日常生活变得更加有趣和更容易应对。)

于 2019-10-25T17:52:34.713 回答
29

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

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

达到与FireDude 的回答相同的结果。有关详细信息,请参阅ZSH 文档

于 2011-04-08T07:54:26.273 回答
16

试试我最喜欢的:放入

~/.zshrc

这一行:

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

不要忘记

source ~/.zshrc

测试更改

您当然可以更改颜色/颜色代码:-)

于 2020-04-11T07:54:36.707 回答
8

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

例如。为了获得这种预期的效果:

期望的结果

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

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

它的工作方式是每次您使用$F{myColor}从该点开始的颜色设置颜色时都会坚持使用该颜色。最后添加很重要,%{reset_color}这样输入文本才能恢复到原始颜色(或者如果您愿意,可以将其设置为其他颜色)。

于 2021-01-10T08:22:14.720 回答
4

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

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

现在,他们遇到了一个问题:他们会移动光标,从而在 Tab 键时产生丑陋的贴花(用于自动完成)。解决方案是简单地将转义序列用%{FOOBAR%}. 我花了一段时间才弄清楚这一点。对于第 2 和第 3 解决方案,加载colors模块是强制性的。为了保持第一个解决方案的可读性,只需为您使用的颜色定义变量。

于 2016-02-29T10:30:51.673 回答
4

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

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

只需将此行添加到您的~/.zshrc.

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

于 2019-10-13T16:27:22.047 回答
4

为了补充上述所有答案,另一个方便的技巧是将彩色提示设置放入 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
于 2020-02-26T17:18:41.727 回答
2

Debian/Ubuntu/Raspberry Pi OS 风格的 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 短机器名
  • %~ 如果在主目录中,则使用 ~ 登录/工作目录
  • %# 如果是普通用户则显示 % 或 # 如果是 su
于 2021-08-16T05:33:21.757 回答
1

man zshall 并搜索 PROMPT EXPANSION

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

因此,最好的选择可能是 man zshall 并搜索 PROMPT EXPANSION 以找出您特定 zsh 安装的所有规则。请注意评论中的“我使用 Ubuntu 11.04 或 10.4 或 OSX”之类的内容并不是很有意义,因为不清楚您使用的是哪个版本的 ZSH。Ubuntu 11.04 并不意味着比 ubuntu 10.04 更新版本的 ZSH。安装旧版本可能有多种原因。就此而言,较新版本的 ZSH 并不意味着在不知道它是哪个版本的 ZSH 的情况下使用哪种语法。

于 2014-07-17T16:02:58.643 回答