macos - 在 zsh PS1(提示)env var 中使用自定义颜色会导致空格问题

标签 macos terminal colors zsh macos-catalina

我的设置:

  • zsh 5.7.1 (x86_64-apple-darwin19.0)
  • macOS Catalina 10.15.5

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

当我尝试使用 ANSI 颜色或 tput 添加文本着色时出现问题。示例(没有终止颜色,无论如何它都会表现得很奇怪):

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

这是我使用 Ctrl+R(反向搜索)时发生的情况: weird indents

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

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

我尝试使用 this answer但是 shell 无法解析解决方案:rombez@MacBook-Pro\[\e[38;5;197m\]~

最佳答案

ANSI 转义序列不占用终端上的任何空间,因此您必须告诉 zsh 它们不会增加提示的长度。为此,您可以将它们包装在 %{...%} 中。

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

但是,您在 zsh 中不需要像在 bash 中那样频繁地使用原始 ANSI 转义序列。您可以直接使用 %F 序列指定颜色,zsh 知道在计算提示大小时如何处理。

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

关于macos - 在 zsh PS1(提示)env var 中使用自定义颜色会导致空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62953003/

相关文章:

javascript - 提取前景背景颜色对的解析器

objective-c - 在哪里寻找错误。文档、应用程序委托(delegate)或两者兼而有之?

objective-c - 操作系统 : Move keyboard focus between textfields and buttons using tab key

intellij-idea - Intellij git bash 终端波浪号键

node.js - 使用 WSL2 与安装在 Windows 上的应用程序交互

python - 生成所有可能的 rgb 颜色

objective-c - 如何从包含路径的 NSString 创建 FSRef?

java - 我无法签署我的代码。对最终用户会产生什么影响?

terminal - Ubuntu 19.10下Ada 2012的NCurses构建环境

delphi - 如何以编程方式更改标签的字体颜色