在 zsh PS1(提示)env var 中使用自定义颜色会导致空格问题
Using custom colors in zsh PS1 (prompt) env var causes problems with whitespace
我的设置:
- zsh 5.7.1 (x86_64-apple-darwin19.0)
- macOS 卡特琳娜 10.15.5
这是标准 PS1 变量:PS1="%n@%m %~ %# "
当我尝试使用 ANSI 颜色或 tput 添加文本着色时出现问题。示例(不终止颜色,无论如何它都会表现得很奇怪):
PS1="%n@%m \e[38;5;197m%~ %# "
以下是我使用 Ctrl+R(反向搜索)时发生的情况:
这个缩进的原因是什么?
第二个问题发生在提示中的一个长字符串转到换行符时 - 换行符后的新字符与第一行重叠,我看不到后者。这只发生在第一个换行符上,第三个换行符正常出现(但排在第二位)。
我尝试使用 this answer 但 shell 无法解析解决方案:rombez@MacBook-Pro \[\e[38;5;197m\]~
ANSI 转义序列不会占用终端上的任何 space,因此您必须告诉 zsh
它们不会影响提示符的长度。您可以通过将它们包装在 %{...%}
.
中来做到这一点
PS1="%n@%m %{\e[38;5;197m%}%~ %# "
但是,您在 zsh
中不需要像在 bash
中那样频繁地使用原始 ANSI 转义序列。您可以直接使用 %F
序列指定颜色,zsh
知道在计算提示大小时如何处理。
PS1='%n@%m %F{197}%~ %# '
我的设置:
- zsh 5.7.1 (x86_64-apple-darwin19.0)
- macOS 卡特琳娜 10.15.5
这是标准 PS1 变量:PS1="%n@%m %~ %# "
当我尝试使用 ANSI 颜色或 tput 添加文本着色时出现问题。示例(不终止颜色,无论如何它都会表现得很奇怪):
PS1="%n@%m \e[38;5;197m%~ %# "
以下是我使用 Ctrl+R(反向搜索)时发生的情况:
这个缩进的原因是什么?
第二个问题发生在提示中的一个长字符串转到换行符时 - 换行符后的新字符与第一行重叠,我看不到后者。这只发生在第一个换行符上,第三个换行符正常出现(但排在第二位)。
我尝试使用 this answer 但 shell 无法解析解决方案:rombez@MacBook-Pro \[\e[38;5;197m\]~
ANSI 转义序列不会占用终端上的任何 space,因此您必须告诉 zsh
它们不会影响提示符的长度。您可以通过将它们包装在 %{...%}
.
PS1="%n@%m %{\e[38;5;197m%}%~ %# "
但是,您在 zsh
中不需要像在 bash
中那样频繁地使用原始 ANSI 转义序列。您可以直接使用 %F
序列指定颜色,zsh
知道在计算提示大小时如何处理。
PS1='%n@%m %F{197}%~ %# '