提示扩展 ZSH 嵌套截断

提示扩展 ZSH 嵌套截断

目前,这是我的 ZSH 提示符的格式。我已经读完了https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html#Prompt-Expansion进一步了解 zsh 提示中的截断,但我不知道如何解决我遇到的这个嵌套截断问题。

export PROMPT="(%10>,,,>[%5>...>william%>>]hello%>>)"

给出

([wi...]hello)

当我希望它最初截断内部表达式时%5>...>william%>> ,然后将截断的表达式传递给外部表达式并截断它。

即我想要输出

([wi...,,,

答案1

手册上说

提示字符串中要截断的部分运行到字符串的末尾,或者运行到构造的下一个封闭组的末尾%(或到同一分组级别遇到的下一个截断(即 a 内的截断%(是分开的),以先到者为准。特别是,参数为零的截断(例如,%<<)标记要截断的字符串范围的末尾,同时从那里开始关闭截断。

也就是说,它们不在同一级别嵌套:第一个%>>停止截断,第二个不执行任何操作,因为截断不再处于活动状态。

但你可以用 嵌套它们%(...)

PROMPT='%12>#>12[%(0l,%5>#>abcefghijk,)]345678%>> end$ '

给出

12[abce#]34# end$

里面的部分是abcefghijk,它被截断为 5 个字符,并被包裹在 中[],然后12[abce#]345678被截断为 12 个字符。

相关内容