0

我在 MacOS Catalina 上有一个运行良好的 zsh 配置。不,除了 Debian 10 Buster,我想得到同样的结果。

问题出现在使用 PROMPT 函数时,该函数显示粉红色斜线,分隔 PATH 当前工作的目录为蓝色。

在 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} '

结果看起来像 PROMPT :

MacOS Catalina 的 zsh 提示符

现在,在 Debian Buster 上,我从 MacOS Catalina 复制了 ~/.zshrc。

并且当显示 PROMPT 时,当前工作目录的 PATH 不显示(空)并且我收到以下错误:

awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
    FILENAME="-" FNR=1 NR=1

我不知道为什么我在 Debian 而不是 MacOS 上出现此错误。我怀疑这是由于我的slash_color()功能工作有所不同,但我不明白起源。

在 Debian 版本中似乎缺少一个变量awk,但我看不到是哪一个。

4

2 回答 2

2

不要这样做:printf something。总是这样做printf "%s", something。awk 错误,因为您传递了无效的printf格式说明符%{%},但您没有传递任何参数。做:

printf "%s%s%s/", blue, $i, pink;

我认为你可以:

{gsub("/", pink "/" blue)}1
于 2020-05-08T13:30:06.073 回答
1

我会使用预命令挂钩和简单的参数扩展,而不是分叉各种外部程序。

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 转义序列。

于 2020-05-08T14:05:41.980 回答