首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时错误- MacOS Catalina上的zsh配置和Debian上的zsh配置之间的兼容性

运行时错误- MacOS Catalina上的zsh配置和Debian上的zsh配置之间的兼容性
EN

Stack Overflow用户
提问于 2020-05-08 13:07:08
回答 2查看 136关注 0票数 0

我在MacOS Catalina上有一个zsh配置,它运行得很好。不,除了Debian10Buster,我想要同样的。

此问题发生在使用function中,该提示符显示粉红色斜线,将路径当前分隔到目录位于蓝色的位置。

在MacOS上,我这样做(在我的.zshrc中):

代码语言:javascript
复制
# 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。

显示提示符时,当前工作目录的路径不显示(空),我得到以下错误:

代码语言:javascript
复制
awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
    FILENAME="-" FNR=1 NR=1

我不知道为什么我在Debian而不是MacOS上有这个错误。我怀疑这是由于我的slash_color()函数在工作上的不同,但我不明白它的起源。

awk的Debian版本似乎缺少一个变量,但我看不出哪个变量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-08 13:30:06

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

代码语言:javascript
复制
printf "%s%s%s/", blue, $i, pink;

我想你可以:

代码语言:javascript
复制
{gsub("/", pink "/" blue)}1
票数 2
EN

Stack Overflow用户

发布于 2020-05-08 14:05:41

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

代码语言:javascript
复制
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转义序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61679902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档