gpt4 book ai didi

zsh - 计算 zsh 提示的用户可见字符串的长度

转载 作者:行者123 更新时间:2023-12-03 22:30:27 26 4
gpt4 key购买 nike

我想把我现在的 git分支到我的多行 ZSH 提示符。然而,这把两行搞乱了——我希望他们能很好地排队。


┌─(simont@charmander:s000)─[master *]────────────────
───(~ )─┐
└─(127:15:44)── ──(Sat,May12)─┘

应该:

┌─(simont@charmander:s000)─[master *]─────────(~ )─┐
└─(127:15:44)── ──(Sat,May12)─┘
git分支是从 oh-my-zsh 中抓取的功能, git_prompt_info() ,它为我提供了分支、脏状态和一堆提示转义,以很好地为事物着色。

我如何计算将明显插入 ZSH 提示中的字符 - 而不是提示转义序列?

最佳答案

假设提示转义的字符串存储在变量 FOO 中。 ,这将只计算用户可见的字符:

                                                                                                                                
FOO=$(git_prompt_info)
local zero='%([BSUbfksu]|([FK]|){*})'
FOOLENGTH=${#${(S%%)FOO//$~zero/}}

这来自 this .zshrc .

这是对其工作原理的粗略解释,大量引用自 man zshexpn , 节 PARAMETER EXPANSION .我不是 100% 确定细节,所以,如果你使用它来开发你自己的等价物,请阅读相关的 man zshall部分。

在线工作 FOOLENGTH=${#${(S%%)FOO//$~zero/}} ,我们有很多位。由内而外:
  • $~zero : ~确保 zero ,我们将其定义为 '%([BSUbfksu]|([FB]|){*})' , 被视为模式而不是普通字符串。
  • ${(S%%)FOO//$~zero/} : 这匹配 ${name//pattern/repl} :

    Replace the longest possible match of pattern in the expansion of parameter name by string repl



    请注意,我们没有 repl ;我们替换 pattern 的最长可能匹配一无所有,从而将其删除。
    (S%%)FOOFOO 进行扩展设置了几个标志。我不太遵循它。
  • ${#${(S%%)FOO//$~zero/}} :${#spec}将替换替换结果的字符长度 spec , 如果 spec是一种替代。在我们的例子中,spec是替换的结果 ${(S%%)FOO//$~zero/} ;所以这基本上返回正则表达式结果中的字符长度 s/zero//FOO ,其中 zero就是上面的图案。
  • 关于zsh - 计算 zsh 提示的用户可见字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564314/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com