在zsh中为命令的输出着色很简单。考虑一下zsh提示符中的以下示例:
print -P "%F{cyan}$(date +'%H:%M:%S')$reset"
您将得到预期的青色HH:MM:SS。它也可以按预期及时运行。现在假设我要用不同的颜色给分钟和秒上色。我没有使用%F{color}
来实现它,这有可能吗?
我可以使用ANSI代码使其工作,但即使如此,它也可以与print一起使用,并且在〜/ .zshrc中用作提示时不起作用:
print -P "%F{cyan}$(date +'%H:\e[38;5;82m%M:%S')"
-在zsh中工作
RPS1="%F{cyan}$(date +'%H:\e[38;5;82m%M:%S')"
作为正确提示会给出17:\e[38;5;82m14:11
我想念什么?我该如何转义颜色代码,甚至更好地使用zsh %F{color}
构造?
答案 0 :(得分:2)
它将存在一些报价问题。
不能将其用作双quo; $(date...)
部分将被扩展,RPS1
不会针对每个提示进行更新。
可以未转义任何转义(\e
)。 (尤其是\e[38;5;82m
命令的date
部分)
因此,对于类似PS
的字符串,使用$'...'
这样的形式进行引用将很有用:
setopt promptsubst
RPS1=$'%F{cyan}$(date +"%H:%%{\e[38;5;82m%%}%M:%S")%{\e[0m%}'
如果可以找到\e[38;5;82m
的颜色索引:
RPS1=$'%F{cyan}$(date +"%H:%%{%%F{82}%%}%M:%S")%{\e[0m%}'
可以通过https://en.wikipedia.org/wiki/ANSI_escape_code#Colors之类的一些工具找到它
注意:\e[38;5;82m
和\e[0m
被%{...%}
包围。
%{...%}
包括一个字符串作为文字转义序列。花括号中的字符串不应更改光标位置。括号对可以嵌套。
注2:setopt promptsubst
。如果没有此选项,则print -P ...
或RPS1=...
均无效。
PROMPT_SUBST
如果设置,则在提示中执行参数扩展,命令替换和算术扩展。提示中的替换不会影响命令状态。
setopt promptsubst
print -P $'%F{cyan}$(date +"%H:%%{\e[38;5;82m%%}%M:%S")%{\e[0m%}'
;# => 23:54:18
PS:%F{color}
构造将变量复制粘贴到屏幕上会更容易。
> print $RPS1 ;# this output could not been used for copy-pasting
%F{cyan}$(date +"%H:%%{%%}%M:%S")%{%}
> print $RPS1 | cat -v ;# this either (but close to)
%F{cyan}$(date +"%H:%%{^[[38;5;82m%%}%M:%S")%{^[[0m%}
答案 1 :(得分:1)
版本1-仅一次调用date
:
d=$(date +'%H:%M:%S');h=${d:0:2};ms=${d:3:5};
RPS1="%F{cyan}$h:%F{green}$ms%F{default}"
版本2-调用date
两次:
RPS1="%F{cyan}$(date +'%H'):%F{green}$(date +'%M:%S')%F{default}"
答案 2 :(得分:0)
无需使用外部命令 var xmlDoc = XDocument.Load(args[0]);
var institution = xmlDoc.Descendants("institution");
var roles = institution.Where(x =>
x.Attribute("institution").Value.ToLower() == "division1").Elements();
foreach (var xElement in roles)
{
// Do your business here working with ======>> xElement.Value
}
:Zsh内置了prompt escapes for displaying date and time:
[…]
date
字符串使用
%D{string}
函数格式化。有关更多详细信息,请参见手册页strftime(3)。[…]
因此,可以使用
实现简单的着色strftime
要具有两种颜色,您可以仅使用两个RPS1='%F{cyan}%D{%H:%M:%S}%f'
块并对其进行不同的着色
%D{…}
这可能很复杂(想要):
RPS1="%F{cyan}%D{%H}:%F{82}%D{%M:%S}"