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


121

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

Answers:


57

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

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

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

有关转义序列的更多信息,请参见ANSI转义码上的Wikipedia条目。


3
我在.zshrc中使用PROMPT ='[%!]'。你怎么给它上色?我在.zshrc中未成功运行PROMPT ='\ e [0; 31m [%!] \ e [0m']。
莱奥列奥波尔德·赫兹준 영

3
@ erikb85:您为什么说错了?我可以做些什么来使答案更好吗?对我来说,执行上述操作会给我一个红色的美元符号,所以我不明白您为什么认为这是错误的。
布莱恩·奥克利

4
它正在工作,但是字符串前的$使zshrc出现故障。当我使用制表法时,文本放在左侧。我更喜欢@Joe the Person的答案
Moebius

1
我同意@Moebius,我希望它可以简单,清晰地工作,但它完全弄乱了cd上的选项卡
diek

2
我以为zsh不需要疯狂的怪异ANSI转义内容...肯定有更好的答案了
Charlie Parker

264

放入~/.zshrc

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

支持颜色:
redbluegreencyanyellowmagentablack,和white(从这个答案),但不同的计算机上可能有不同的有效选项。

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

此外,这是从此处开始如何与目录修剪一起使用的方法。

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

3
同意,到目前为止,这个答案是比较
好的

3
不为我工作。:(zsh: colors: function definition file not found
balki 2011年

您正在使用ZSH4吗?我认为它不适用于低于4.3.11的版本。如果您使用的是最新版本,则可能是使用的文件不正确。

有效的颜色值是多少?
chakrit 2012年

12
%{...%}装置,该内容将被解释为一个文字转义序列,所以在打印时的顺序将光标移动不会。如果您不使用它,则颜色代码实际上可以移动光标并产生不希望的效果。这Visual Effectszshmisc手册页
Bruno Penteado 2013年

69

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

autoload -U promptinit && promptinit

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

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

prompt fade red

有没有办法为所有主题着色?我喜欢沃尔特提示,但希望用红色显示。
Pat Myron

24

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

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

达到与FireDude的答案相同的结果。有关更多信息,请参见ZSH文档


仅供参考。我刚刚在Ubunutu 11.04中尝试过,如果没有,颜色autoload -U colors && colors
将对

2
奇怪的。适用于OS X和Ubuntu 10.04。
安德鲁·马歇尔

@Andrew Marshall是的,但更可能继续使用autoload

@ fireDude67如何设置autoload on
巴尔基2011年

1
如果不需要autoload -U colors,则意味着您的发行版已经在其他zsh初始化文件中拥有它。您仍应将其包含在要与他人共享的脚本中。
kindall

23

可用颜色:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


可用变量:

  • %F{118} (1至256)
  • $FG[018] (1至256)
  • $fg[magenta] (洋红色,红色,白色,黄色,黑色,蓝色,青色,绿色)

提示示例:

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

捕获

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

捕获


安装:

变量定义(PS1 / PROMPT)需要添加到 ~/.zshrc

我们也可以在当前提示下重新定义PS1变量,以立即对其进行测试(更改不会保存)。


15

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

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

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

前景和背景。 另一个关键信息是对于F前景和bac 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)。(我可能会在将来编辑最后一部分,因为以上所有内容都是相关的内容,它们使日常生活变得更加有趣,也更加容易应对。)


1
这是一个非常有用的答案。感谢您整理这些内容。
shaunakde

@shaunakde不客气!:)
MightyMouse

4

我发现,使用zsh5(Debian Jessie上的默认设置)时,所有这些解决方案均有效:

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

现在,他们遇到了一个问题:他们将移动光标,从而在制表时会出现难看的贴花(用于自动完成)。解决方案是简单地用括住转义序列%{FOOBAR%}。花了我一段时间来解决这个问题。对于第二和第三解决方案,加载colors模块是必需的。为了使第一种解决方案易于阅读,只需为您使用的颜色定义变量。


2

要获得取决于上一条命令的退出状态的颜色提示,可以使用以下命令:

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

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

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


这是这里最好的解决方案,非常感谢。
Eddy Ekofo

2

尝试我最喜欢的:放入

~/.zshrc

这行:

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

不要忘记

source ~/.zshrc

测试变化

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


0

man zshall并搜索提示扩展

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

因此,最好的选择是手动执行zshall并搜索PROMPT EXPANSION,以查找特定zsh安装的所有规则。请注意,在注释中,“我使用Ubuntu 11.04或10.4或OSX”之类的含义不是很有意义,因为不清楚您使用的是哪个版本的ZSH。Ubuntu 11.04并不意味着比ubuntu 10.04更高的ZSH版本。可能由于多种原因安装了旧版本。因此,在不知道ZSH是哪个版本的情况下,较新版本的ZSH并不意味着要使用哪种语法。


0

为了补充上述所有答案,另一个方便的技巧是将彩色的提示设置放入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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.