首页 > 解决方案 > 在 zsh PS1(提示)环境变量中使用自定义颜色会导致空格问题

问题描述

我的设置:

这是标准的 PS1 var:PS1="%n@%m %~ %# "

当我尝试使用 ANSI 颜色或 tput 添加文本着色时出现问题。示例(在不终止颜色的情况下,无论如何它的行为都很奇怪):

PS1="%n@%m \e[38;5;197m%~ %# "

以下是我使用 Ctrl+R(反向搜索)时发生的情况: 奇怪的缩进

这种缩进的原因可能是什么?

第二个问题发生在提示符中的长字符串转到换行符时 - 换行符后的新字符与第一行重叠,我看不到后者。这只发生在第一个换行符上,第三个换行符正常出现(但排在第二位)。

我尝试使用此答案,但外壳无法解析解决方案:rombez@MacBook-Pro \[\e[38;5;197m\]~

标签: macosterminalcolorszshmacos-catalina

解决方案


ANSI 转义序列不占用终端上的任何空间,因此您必须zsh说明它们不会影响提示的长度。您可以通过将它们包装在%{...%}.

PS1="%n@%m %{\e[38;5;197m%}%~ %# "

但是,您不需要zsh像在bash. %F您可以直接使用序列指定颜色,它zsh知道在计算提示大小时如何处理。

PS1='%n@%m %F{197}%~ %# '

推荐阅读