【发布时间】:2010-10-15 22:36:49
【问题描述】:
为了更好地识别命令行输出的开始和结束,我想更改提示的颜色,使其与程序输出明显不同。当我使用zsh时,有人可以给我提示吗?
【问题讨论】:
为了更好地识别命令行输出的开始和结束,我想更改提示的颜色,使其与程序输出明显不同。当我使用zsh时,有人可以给我提示吗?
【问题讨论】:
把这个放在~/.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(来自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
%{...%} 表示内容将被解释为文字转义序列,因此在打印序列时光标不会移动。如果您不使用它,颜色代码实际上会移动光标并产生不希望的效果。这记录在 zshmisc man page 的 Visual Effects 部分中
% 在做什么?还有像{$fg...} 之类的东西有什么作用?很难理解您的答案,因为它假定您对 shell 或 zsh 有很多了解。你能不能让它更独立一些或链接到参考文献?
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} 也可以使用【讨论】:
试试我最喜欢的: 放入
~/.zshrc
这一行:
PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'
别忘了
source ~/.zshrc
测试更改
您当然可以更改颜色/颜色代码 :-)
【讨论】:
为了补充以上所有答案,另一个方便的技巧是将彩色提示设置放入 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
【讨论】:
上面 Bryan Oakley 的答案有一个小故障,正如已经指出的那样,而 Andrew Marshall 提供的解决方案虽然没有出现故障,但是对于所使用的颜色进行过多的定制,这并不明显。
由于 macOS Catalina 从现在开始要求 zsh 成为默认 shell,我想更多的人可能想要自定义他们的提示,并且可能会来这里寻求答案。所以,我想我会尝试给出一个更广泛的总结,并涉及其他密切相关的概念,这些概念允许更多的定制。
各种颜色的三位数代码。 首先,在这里我们可以找到各种颜色的 3 位代码:https://unix.stackexchange.com/a/124409/194343。 例如,214 是某种橙色。
前景和背景。 另一个关键信息是,对于 Foreground 和 bacKground 颜色,可以使用 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(来源:@987654325 @)。 (我可能会在未来编辑这最后一部分,因为以上所有内容都是相关的,让日常生活变得更加有趣和更容易应对。)
【讨论】:
要根据最后一个命令的退出状态获得带有颜色的提示,您可以使用以下命令:
PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'
只需将此行添加到您的~/.zshrc。
documentation 列出了可能的占位符。
【讨论】:
PS1='%(?.%F{green}.%F{red})%n@%m:%F{141}%d$ %F{reset}' 我用这个来添加 PWD。span>
我发现,使用 zsh5(Debian Jessie 上的默认选项),所有这些解决方案都有效:
$'\e[00m$fg[white]$fg{white}现在,他们遇到了一个问题:他们会移动光标,导致在 Tab 键时出现丑陋的贴花(用于自动完成)。解决方案是简单地用%{FOOBAR%} 包围转义序列。我花了一段时间才弄清楚这一点。
对于第 2 和第 3 解决方案,必须加载 colors 模块。
为了使第一个解决方案保持可读性,只需为您使用的颜色定义变量。
【讨论】:
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 的情况下使用哪种语法。
【讨论】:
Zsh 带有内置的彩色提示。试试
autoload -U promptinit && promptinit
然后prompt -l 列出可用提示,-p fire 预览“触发”提示,-s fire 设置它。
当你准备好添加提示时,在上面的自动加载行下方添加如下内容:
prompt fade red
【讨论】:
我认为不再需要 autoload -U colors && colors 并且可以简单地这样做:
PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "
达到与FireDude's answer 相同的结果。请参阅ZSH documentation 了解更多信息。
【讨论】:
autoload -U colors && colors,颜色对我不起作用
autoload 一起工作。
autoload on?
autoload -U colors,这意味着你的发行版已经在其他一些zsh初始化文件中有它。您仍应将其包含在您打算与他人共享的脚本中。
这里是一个如何设置红色提示的例子:
PS1=$'\e[0;31m$ \e[0m'
神奇的是\e[0;31m(打开红色前景)和\e[0m(关闭字符属性)。这些被称为转义序列。不同的转义序列为您提供不同的结果,从绝对光标定位到颜色,再到能够更改窗口的标题栏等等。
有关转义序列的更多信息,请参阅the wikipedia entry on ANSI escape codes
【讨论】:
%{ 和%} 标记。如果没有这些,zsh 会将转义序列计为提示符的显示长度的一部分,并且您最终会在较长的命令上出现奇怪的光标定位和行编辑器行为。请参阅man zshmisc,提示序列的扩展,视觉效果。不是所有的 shell 都要求你这样做;例如,Korn shell 会解析 PS1 字符串中的常见转义序列(尽管它会在无法正确识别的序列上显示上述问题,通常是不寻常的序列)。