我在MacOS Catalina上有一个zsh配置,它运行得很好。不,除了Debian10Buster,我想要同样的。
此问题发生在使用function中,该提示符显示粉红色斜线,将路径当前分隔到目录位于蓝色的位置。
在MacOS上,我这样做(在我的.zshrc中):
# Path with colorized forward slash
slash_color() {
dirs | awk -F "/" '{ blue="%{\033[38;5;75m%}"; \
pink="%{\033[38;5;206m%}"; \
for (i=1; i<NF; i++) \
printf blue $i pink "/"; \
printf blue $NF pink; \
}';
}
# Prompt final
PROMPT=$'%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|$(slash_color)%F{13}|%F{7} '结果显示为提示符:

现在,关于Debian,我从MacOS Catalina复制了~/..zshrc。
当显示提示符时,当前工作目录的路径不显示(空),我得到以下错误:
awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
FILENAME="-" FNR=1 NR=1我不知道为什么我在Debian而不是MacOS上有这个错误。我怀疑这是由于我的slash_color()函数在工作上的不同,但我不明白它的起源。
awk的Debian版本似乎缺少一个变量,但我看不出哪个变量。
发布于 2020-05-08 13:30:06
不要这样做:printf something。总是做printf "%s", something。awk错误,因为您传递了无效的printf格式说明符%{和%},但是没有传递任何参数。做:
printf "%s%s%s/", blue, $i, pink;我想你可以:
{gsub("/", pink "/" blue)}1发布于 2020-05-08 14:05:41
我会使用预命令钩子和简单的参数扩展,而不是分叉各种外部程序。
precmd () {
bar='%F{13}|'
prompt="$bar%F{green}%n@%F{cyan}%m$bar%f%T$bar%F{75}"
prompt+=${PWD:gs./.%F{206}/%F{75}}
prompt+="$bar%F{7} "
}将其添加到您的.zshrc文件中,prompt将在显示它之前被重置,而不是在提示符本身中嵌入一个shell函数。
PWD是当前的工作目录。gs.---.---扩展修饰符用%F{206}/%F{75}替换每个/,使用zsh自己的颜色转义序列,而不是使用原始的ANSI转义序列。
https://stackoverflow.com/questions/61679902
复制相似问题