如何更改 zsh 中提示的颜色(不同于普通文本)?

Posted

技术标签:

【中文标题】如何更改 zsh 中提示的颜色(不同于普通文本)?【英文标题】:How can I change the color of my prompt in zsh (different from normal text)? 【发布时间】:2010-10-15 22:36:49 【问题描述】:

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

【问题讨论】:

【参考方案1】:

把这个放在~/.zshrc:

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

支持的颜色:redbluegreencyanyellowmagentablack、&white(来自this answer)虽然不同的计算机可能有不同的有效选项。

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

此外,您可以通过以下方式使其与来自here 的目录修剪一起工作。

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

【讨论】:

同意,到目前为止最好的答案(幸运的是,这个答案是谷歌的第三个结果;) 不适合我。 :(zsh: colors: function definition file not found 您使用的是 ZSH4 吗?我认为它不适用于低于 4.3.11 的版本。如果您有最新版本,则可能没有使用正确的文件。 %...% 表示内容将被解释为文字转义序列,因此在打印序列时光标不会移动。如果您不使用它,颜色代码实际上会移动光标并产生不希望的效果。这记录在 zshmisc man page 的 Visual Effects 部分中 您介意详细解释提示中的所有符号在做什么,或者至少是一个参考链接吗?例如外面的% 在做什么?还有像$fg... 之类的东西有什么作用?很难理解您的答案,因为它假定您对 shell 或 zsh 有很多了解。你能不能让它更独立一些或链接到参考文献?【参考方案2】:

Debian/Ubuntu/Raspberry Pi OS 风格的 bash 提示符:

autoload -U colors && colors
PS1="%B%F034%n@%m%f%b:%B%F019%~ %#%f%b "

不完全确定autoload -U colors && colors 是否必要,但当我使用$fg[...] 而不是%F... 时确实需要它。 在我的例子中;

%F(%f) 开始(停止) 前景色 - 我使用了 256COLOR 值,但你也可以使用十六进制,例如,我使用普通绿色 %F034%F#00aa00 也可以使用 %B(%b) 开始(停止)粗体 %n $USERNAME %m 短机器名 %~ 如果在主目录中,则使用 ~ 登录/工作目录 %# 如果是普通用户则显示 % 或 # 如果是 su

【讨论】:

【参考方案3】:

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

例如。为了得到这个想要的效果:

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

PROMPT='%Fmagenta$PWD/#$HOME/~ %Fgreen$vcs_info_msg_0_ %Fcyan$%Freset_color '

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

【讨论】:

【参考方案4】:

试试我最喜欢的: 放入

~/.zshrc

这一行:

PROMPT='%F240%n%Fred@%Fgreen%m:%F141%d$ %Freset'

别忘了

source ~/.zshrc

测试更改

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

【讨论】:

【参考方案5】:

为了补充以上所有答案,另一个方便的技巧是将彩色提示设置放入 zsh 函数中。在那里你可以定义局部变量来别名更长的命令,例如rc=$reset_color 或定义您自己的颜色变量。不要忘记把它放到你的.zshrc 文件中并调用你定义的函数:

# Coloured prompt
autoload -U colors && colors
function myprompt 
  local rc=$reset_color
  export PS1="%Fcyan%n%$rc%@%Fgreen%m%$rc%:%Fmagenta%~%$rc%%# "

myprompt

【讨论】:

【参考方案6】:

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

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

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

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

所以比如说下面两个命令

autoload -U colors && colors
export PS1="%F214%K000%m%F015%K000:%F039%K000%~%F015%K000\$ "

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

更多相关信息见下文。

右侧提示信息。例如,添加时间戳。见https://superuser.com/a/1251045/290299。当然,这可以用颜色编码,例如一些浅蓝色/紫色,像这样:

RPROMPT="%F111%K000[%D%f/%m/%y|%@]"

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

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

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

【讨论】:

这是一个非常有帮助的答案。感谢您将这些放在一起。【参考方案7】:

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

PS1='%(?.%Fgreen.%Fred)%n@%m:%~%# %f'

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

documentation 列出了可能的占位符。

【讨论】:

PS1='%(?.%Fgreen.%Fred)%n@%m:%F141%d$ %Freset' 我用这个来添加 PWD。​​span> 【参考方案8】:

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

$'\e[00m $fg[white] $fgwhite

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

【讨论】:

【参考方案9】:

man zshall 并搜索 PROMPT EXPANSION

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

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

【讨论】:

【参考方案10】:

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

autoload -U promptinit && promptinit

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

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

prompt fade red

【讨论】:

有没有办法为所有主题着色?我喜欢 walters 提示,但希望它是红色的。 这听起来不错,但我不喜欢这些选项中的任何一个......【参考方案11】:

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

PS1="%%Fred%%n%%f%@%%Fblue%%m %%Fyellow%%~ %$%f%%% "

达到与FireDude's answer 相同的结果。请参阅ZSH documentation 了解更多信息。

【讨论】:

仅供参考。我刚刚在 Ubunutu 11.04 中尝试过,如果没有 autoload -U colors && colors,颜色对我不起作用 很奇怪。在 OS X 和 Ubuntu 10.04 上为我工作。 @Andrew Marshall 是的,但它更有可能与autoload 一起工作。 @fireDude67 如何设置autoload on 如果你不需要autoload -U colors,这意味着你的发行版已经在其他一些zsh初始化文件中有它。您仍应将其包含在您打算与他人共享的脚本中。【参考方案12】:

这里是一个如何设置红色提示的例子:

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

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

有关转义序列的更多信息,请参阅the wikipedia entry on ANSI escape codes

【讨论】:

我在我的 .zshrc 中使用了 PROMPT='[%!]'。你怎么能给它上色?我在我的 .zshrc 中运行 PROMPT='\e[0;31m[%!] \e[0m' 失败。 @erikb85:你为什么说它错了?我可以做些什么来改善答案吗?对我来说,执行上述操作会给我一个红色的美元符号,所以我不明白你为什么认为它是错误的。 它正在工作,但字符串前面的 $ 使 zshrc 出现故障。当我使用制表时,文本放在左边。我更喜欢@Joe 这个人的答案 我认为 zsh 不需要疯狂怪异的 ANSI 转义东西...一定有更好的答案... 您的答案缺少标识转义序列的%% 标记。如果没有这些,zsh 会将转义序列计为提示符的显示长度的一部分,并且您最终会在较长的命令上出现奇怪的光标定位和行编辑器行为。请参阅man zshmisc,提示序列的扩展,视觉效果。不是所有的 shell 都要求你这样做;例如,Korn shell 会解析 PS1 字符串中的常见转义序列(尽管它会在无法正确识别的序列上显示上述问题,通常是不寻常的序列)。

以上是关于如何更改 zsh 中提示的颜色(不同于普通文本)?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何更改 TextInputLayout(材料组件)中的文本颜色?

使 TextView 的文本颜色的一半不同于其他 50% 的文本 SWIFT

更改操作栏searchview提示文本颜色

如何将所有文本颜色更改为默认颜色(文本为黑色,提示为灰色)而不是白色

如何更改用户输入的编辑文本的颜色?

如何在 ImGui 中更改 InputText 的文本颜色?