我在这里和谷歌上搜索了几个答案,但我仍然不确定我的提示出了什么问题。
根据我阅读的文档,这应该是有效的。
请注意日期扩展实际上可行,因此提示符替换正在工作。ZSH的提示符扩展手册说明
下面的内容是有效的。
我在不同的操作系统上(OSX Yosimite中的ZSH 5.0.5,MacPorts中的5.0.7以及Debian的4.3.17)测试了这个代码段,并得到了预期结果
根据我阅读的文档,这应该是有效的。
setopt prompt_subst
autoload -U colors && colors
PROMPT="%{[00m[38;5;245m%}test %D%{[00m%}"
不过,我需要翻译的内容是:
[00m[38;5;245mtest 15-07-01[00m
请注意日期扩展实际上可行,因此提示符替换正在工作。ZSH的提示符扩展手册说明
%{...%}
应该被视为原始转义码,但似乎并没有发生这种情况。将该字符串传递给print -P
也会产生上面的输出。我在互联网上找到了ZSH的示例提示符,也似乎表明上述语法应该起作用。请参阅此处,其中$FG和$FX数组填充了转义码,并在此处定义。我直接尝试了这个示例,将上述两个文件合并,添加setopt prompt_subst
以确保它被设置,然后进行源码编译,结果提示符成为了一堆转义代码。下面的内容是有效的。
setopt prompt_subst
autoload -U colors && colors
PROMPT=$'%{\e[00m\e[38;5;245m%}test %D%{\e[00m%}'
我在不同的操作系统上(OSX Yosimite中的ZSH 5.0.5,MacPorts中的5.0.7以及Debian的4.3.17)测试了这个代码段,并得到了预期结果
test 15-07-01
以正确的颜色显示。虽然我已经提供了一个有效的解决方案来解决我的问题,但是我仍然对为什么第一种语法没有按照预期工作感到好奇。请注意,保留了HTML标签。
ESC[
开头,而不仅仅是[
。 - chepnerprompt="%F{245}test %D%f"
- chepner%{ ... %}
提供了每个序列开头的转义字符;实际上,它只是指示 shell,花括号的内容在输出中占用零空间,以便可以计算出提示符的正确屏幕长度。 - chepnerzsh
计算出的要更长,相对于如果您根本没有使用%{...%}
,则提示符会比zsh
计算出的要短。 - chepner