ZSH 提示打印 '[m' 而不是 '%'

ZSH 提示打印 '[m' 而不是 '%'

我在 vim 状态行中添加了电池功能这是一个链接。它在 vim 中正确显示我的电池,如果我运行$ acpi | grep -oP "(\d+)%"它会返回一些数字,后跟百分号(如预期)。我决定更新我的,zshrc因为它的打印效果比cut我使用的更好:

bat () { acpi | grep -oP "(\d+)%" }
PROMPT="%t | $(bat) | %d
$ "

然而,我最终得到的是:

7:22PM | 89[m | /home/rain
$ 

如何将[m打印为%?或者我可以完全放弃它并只打印数字吗?

答案1

[m可能是 ANSI 转义码的尾部\e[m(= 重置为正常颜色和属性,短格式),并且初始 ESC 字符 ( \e) 被剥离。

我的猜测是,grep当交互运行时,您正在对匹配的字符串进行着色,并且当作为 shell 函数的一部分运行时,交互性检测会失败,该 shell 函数的输出成为提示的一部分。

输出中的百分号会触发提示中的特殊处理,如果%\e没有任何意义,则将其删除。

尝试bat像这样定义你的函数:

bat () { acpi | grep --color=never -oP "(\d+)%" }

相关内容