将以下内容放入~/.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%}%% "
Zsh自带有彩色提示符。尝试执行以下命令:
autoload -U promptinit && promptinit
然后输入prompt -l
命令来查看可用的提示符,-p fire
可以预览“fire”提示符,-s fire
则将其设为当前提示符。
当你准备添加一个新的提示符时,只需在上面autoload行下方添加类似以下的内容:
prompt fade red
以下是设置红色提示的示例:
PS1=$'\e[0;31m$ \e[0m'
这个魔法是由\e[0;31m
(开启红色前景)和\e[0m
(关闭字符属性)组成的,它们被称为转义序列。不同的转义序列会带来不同的结果,包括绝对光标定位、颜色、能够更改窗口标题栏等。
要了解更多关于转义序列的知识,请参阅维基百科中有关ANSI转义代码的条目
%{
和 %}
标记。如果没有这些标记,zsh 将会将转义序列计入提示符展示长度中,导致在输入更长的命令时出现奇怪的光标定位和行编辑器行为。请参见 man zshmisc
中关于提示符序列扩展和视觉效果的部分。并非所有 shell 都需要你这样做;例如 Korn shell 会解析 PS1 字符串中的常见转义序列(尽管在它无法正确识别的序列上,通常是不常见的序列,也会显示上述问题)。 - Perette正如已经指出的那样,Bryan Oakley上面的答案有一个错误,并且Andrew Marshall提供的解决方案虽然没有该错误,但它并不能使太多自定义颜色使用变得明显。
由于macOS Catalina现在要求将zsh作为默认shell,我认为会有更多人想要自定义其提示符,并可能在这里寻找答案。因此,我想尝试给出更广泛的摘要并涉及其他非常相关的概念,以允许更多的自定义。
用于各种颜色的3位代码。 首先,我们可以在此处找到各种颜色的3位代码:https://unix.stackexchange.com/a/124409/194343。 例如,214是一种橙色。
前景和背景。 另一个关键信息是,对于前景和背景颜色,可以分别使用F和K来定义所需的颜色。来源是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
最后,作为我的最后一条评论,我没有测试过的一个选择是让某人从MacPorts安装端口coreutils
然后使用gdircolors
。(来源:https://unix.stackexchange.com/a/174596/194343)。(由于上述所有内容都是相关的部分,使得每天的生活更加有趣、更容易应对,所以我可能会在未来编辑这个最后一部分。)
我认为autoload -U colors && colors
不再需要,可以直接执行以下命令:
PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "
为了达到与FireDude的回答相同的结果。请参考ZSH文档获取更多信息。
autoload
更有可能起作用。 - Joe the Personautoload -U colors
,那么这意味着您的发行版已经在某个其他的 zsh 初始化文件中包含了它。但是,您仍应该在您打算与他人共享的脚本中包含它。 - kindall尝试我的最爱:放进去
~/.zshrc
这一行:
PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'
不要忘记
source ~/.zshrc
你可以测试更改
当然,你可以更改颜色/颜色代码 :-)
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{034}
,但%F{#00aa00}
也可以。编辑:已在 macOS Big Sur、Monterey 和 Ventura 上测试。不确定早期的 zsh 版本,但 Ventura 13.0 是 zsh 5.8.1 (x86_64-apple-darwin22.0)。
$'\e[00m
$fg[white]
$fg{white}
%{FOOBAR%}
来包围转义序列即可。我花了一段时间才想到这个方法。
对于第2和第3个解决方案,必须加载colors
模块。
为了使第1个解决方案易读,只需为所使用的颜色定义变量即可。PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'
将以下内容添加到您的~/.zshrc
文件中。
文档列出了可能的占位符。
zsh: 颜色:找不到函数定义文件
- balki%{...%}
表示该内容将被解释为字面意义的转义序列,因此在打印序列时光标不会移动。如果不使用此选项,颜色代码实际上可以移动光标并产生不良效果。这在 zshmisc man page 的“Visual Effects”部分有详细记录。 - Bruno Penteado%
是做什么的?还有像{$fg...}
这样的东西是做什么的?因为你的回答假设了太多关于shell或zsh的知识,所以很难理解。你能让它更加自包含一些或者提供参考链接吗? - Charlie Parker%{$fg[red]%}%n
命令没有响应以进行颜色更改。我不得不使用%F{red}%n
代替。不确定原因是什么。可能是由于版本更新导致的。 - Tong Zhao