【问题标题】:Using custom colors in zsh PS1 (prompt) env var causes problems with whitespace在 zsh PS1(提示)环境变量中使用自定义颜色会导致空格问题
【发布时间】:2020-11-07 04:52:03
【问题描述】:

我的设置:

  • 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(反向搜索)时会发生以下情况:

这个缩进的原因是什么?

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

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

【问题讨论】:

    标签: macos terminal colors zsh macos-catalina


    【解决方案1】:

    ANSI 转义序列不占用终端上的任何空间,因此您必须告诉zsh 它们不会影响提示符的长度。您可以通过将它们包装在 %{...%} 中来做到这一点。

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多