目前,这是我的 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 个字符。