zshell 提示符中的颜色导致奇怪的行为

zshell 提示符中的颜色导致奇怪的行为

我正在运行 OSX Lion 10.7.3,zsh版本 4.3.11。我发现,如果我的提示符中有颜色转义代码,事情就会变得一团糟。例如,如果我在命令历史记录中向前滚动到较长的一行,然后向后滚动到较短的一行,许多字符将不会被清除。如果我不得不猜测,它会计算可见字符的数量,然后使用它来确定前面有多少个字符需要清除 - 当然,这不会清除足够的字符。

不管怎样,Ruby 的Readline包表现出了相同的行为(这意味着我的提示中也不能有颜色irb)。

bash表现完美,所以我不确定发生了什么。我假设bashzsh都在使用readline...所以我不明白发生了什么。

任何帮助将不胜感激。

更新时间:2012 年 3 月 19 日

我尝试了该系统zsh和通过该系统安装的系统brew install zsh- 两种方法都没有成功。

以下是 的输出otool -L /usr/local/Cellar/zsh/4.3.17/bin/zsh

/usr/local/Cellar/zsh/4.3.17/bin/zsh:
    /usr/local/lib/libgdbm.4.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/local/lib/libpcre.0.dylib (compatibility version 1.0.0, current version 1.1.0)
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)

我有点怀疑这是否是 libncurses 的问题,因为我假设这就是使用完成和历史记录功能的原因。

答案1

哎呀 - 我需要用%{和包围颜色代码%},如下所述:

奇怪的 zsh 自动完成行为

所以,如果我想要提示的一部分是蓝色,它可能看起来像这样:

  export PS1=$'%{$fg[blue]%}${PWD/#$HOME/~}%{$reset_color%} %{$fg[red]%}→%{$reset_color%}'

那看起来就像是~/src →

相关内容