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

时间:2009-03-27 13:29:30

标签: colors zsh prompt

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

11 个答案:

答案 0 :(得分:209)

将其放入~/.zshrc

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

支持的颜色:
红色,蓝色,绿色,青色,黄色,洋红色,黑色&白色(来自this answer)虽然不同的计算机可能有不同的有效选项。

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

此外,以下是如何使用here中的目录修剪工具。

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

答案 1 :(得分:47)

Zsh内置彩色提示。尝试

autoload -U promptinit && promptinit

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

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

prompt fade red

答案 2 :(得分:41)

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

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

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

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

答案 3 :(得分:14)

我认为不再需要autoload -U colors && colors而且可以做到:

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

获得与FireDude's answer相同的结果。有关详细信息,请参阅ZSH documentation

答案 4 :(得分:5)

上面已经指出,布莱恩·奥克利(Bryan Oakley)的答案有一个小问题,而安德鲁·马歇尔(Andrew Marshall)提供的解决方案虽然没有小问题,但是对于使用的颜色进行过多的自定义并没有使其显而易见。

由于macOS Catalina从现在开始要求将zsh用作默认外壳程序,我认为可能会有更多人希望自定义其提示,并且可能会来这里寻求答案。因此,我想我将尝试给出更广泛的摘要,并涉及允许更多自定义的其他非常紧密相关的概念。

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

前景和背景。 另一个关键信息是,对于 F 底色和bac K 底色,可以使用 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然后使用{{1} }(来源:https://unix.stackexchange.com/a/174596/194343)。 (我将来可能会编辑最后一部分,因为上述所有都是相关的部分,它们使日常生活变得更加有趣,也更加容易应对。)

答案 5 :(得分:4)

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

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

现在,他们遇到了一个问题:他们会移动光标,在制表时会产生难看的贴花(用于自动完成)。解决方案只是用%{FOOBAR%}包围转义序列。我花了一些时间来弄清楚这一点。 对于第2和第3个解决方案,必须加载colors模块。 要保持第一个解决方案的可读性,只需为您使用的颜色定义变量即可。

答案 6 :(得分:3)

尝试我的最爱: 放入

~/.zshrc

此行:

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

不要忘记

source ~/.zshrc

测试更改

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

答案 7 :(得分:1)

要获得根据上一个命令的退出状态显示颜色的提示,可以使用以下方法:

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

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

documentation列出了可能的占位符。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

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

Desired Outcome

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

scanf

它的工作方式是每次您使用 PROMPT='%F{magenta}${PWD/#$HOME/~} %F{green}${vcs_info_msg_0_} %F{cyan}$%F{reset_color} ' 设置颜色时,从那时起的颜色都会保持不变。在末尾添加 $F{myColor} 很重要,这样输入文本才能恢复到原始颜色(或者您可以根据需要将其设置为其他颜色)。

答案 10 :(得分:0)

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版本的情况下使用哪种语法。