Zsh ${${(S%%)字符串//(\%([KF1]|)\{*\}\%[Bbkf])}是什么意思

Zsh ${${(S%%)字符串//(\%([KF1]|)\{*\}\%[Bbkf])}是什么意思,zsh,prompt,Zsh,Prompt,我在ADAM2ZSH提示符中找到了这个,我不知道它是什么意思。显然,它计算字符串的长度,但它是如何计算的,这是我无法理解的 ${#${(S%%)string//(\%([KF1]|)\{*\}|\%[Bbkf])}} 我在谷歌上搜索了zsh提示符regex,找到了。上面说$计算内容的长度。该链接的信息也比我找到的要多。在去掉一些ANSI样式的字符格式后,您的模式会计算字符串的长度 大约: ${}-长度 ${}-嵌套 S%%-从结尾开始搜索子字符串 //-在本例中全局替换删除,因为后面没有斜杠

我在ADAM2ZSH提示符中找到了这个,我不知道它是什么意思。显然,它计算字符串的长度,但它是如何计算的,这是我无法理解的

${#${(S%%)string//(\%([KF1]|)\{*\}|\%[Bbkf])}}

我在谷歌上搜索了zsh提示符regex,找到了。上面说$计算内容的长度。该链接的信息也比我找到的要多。

在去掉一些ANSI样式的字符格式后,您的模式会计算字符串的长度

大约:

${}-长度

${}-嵌套

S%%-从结尾开始搜索子字符串

//-在本例中全局替换删除,因为后面没有斜杠

-捕获组

\%-文字百分号

[KF1]-字符列表:K=开始背景色,F=开始前景色

[Bbkf]-字符列表:B=开始粗体,B=结束粗体,k=结束背景,f=结束前景


然后我就迷路了。

如果它真的计算了字符串的长度,那么我应该更经常地发誓数数东西。@$%*&$%。这意味着它太难读了,你不得不在StackOverflow上询问它。奎因的变种。要么故意混淆,要么。。。我不知道是什么。你有文档的来源吗?或者这一切都是出于记忆?哇!这都是从mem^H^H^H^H手册页和信息文件中获得的,并且之前使用过zsh提示符。如果OP为变量发布了一些可能的值,我可能会更进一步;如果您还没有这样做,请提示。实际上,它是在忽略会改变终端属性(例如,颜色)的序列后计算渲染提示的长度,而不移动光标。这是为了弄清楚这条线是否有空间容纳右手边的部分user@host. 请注意,在S%%中,只有“S”用于搜索子字符串。“%”正在启用字符串的完全提示扩展,以便将“%”之类的内容映射到目录字符串。