我正在运行 OSX Lion 10.7.3,zsh
版本 4.3.11。我发现,如果我的提示符中有颜色转义代码,事情就会变得一团糟。例如,如果我在命令历史记录中向前滚动到较长的一行,然后向后滚动到较短的一行,许多字符将不会被清除。如果我不得不猜测,它会计算可见字符的数量,然后使用它来确定前面有多少个字符需要清除 - 当然,这不会清除足够的字符。
不管怎样,Ruby 的Readline
包表现出了相同的行为(这意味着我的提示中也不能有颜色irb
)。
bash
表现完美,所以我不确定发生了什么。我假设bash
和zsh
都在使用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
哎呀 - 我需要用%{
和包围颜色代码%}
,如下所述:
所以,如果我想要提示的一部分是蓝色,它可能看起来像这样:
export PS1=$'%{$fg[blue]%}${PWD/#$HOME/~}%{$reset_color%} %{$fg[red]%}→%{$reset_color%}'
那看起来就像是~/src →
。