如何在提示符中包含当前的 Anaconda 环境?

如何在提示符中包含当前的 Anaconda 环境?

我发现这个帖子这完美地描述了我遇到的问题。唯一的区别是我使用的是 zsh。当我按照 @filbranden 的描述转义 '$' 时,它只会将 打印$(basename $CONDA_DEFAULT_ENV)到提示符处。以下类型可以工作,但不会像 @johnchase 最初描述的那样通过激活进行更新。

PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}("$(basename $CONDA_DEFAULT_ENV)") %F{white}:> "

给我:

(base) :> conda activate datasci

[ downtime@samurai:/home/downtime ]
(base) :>                                                                                                                                                                         [insert]

[ downtime@samurai:/home/downtime ]
(base) :> echo $CONDA_DEFAULT_ENV                                                                                                                                                 [insert]
datasci

如果我更改为:

PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}(\$(basename \$CONDA_DEFAULT_ENV)) %F{white}:> "

我得到:

[ downtime@samurai:/home/downtime ]
($(basename $CONDA_DEFAULT_ENV)) :>

zsh 处理 PS1 的方式有那么不同吗?我缺少什么?

答案1

像往常一样,我在发布问题后几分钟内就找到了答案,尽管我已经花了几个小时试图找出答案。答案是,是的,zsh 显然是完全不同的。这个帖子这就是我找到答案的原因。

precmd() {
       psvar[1]=$CONDA_DEFAULT_ENV:t
}
PS1=$'\n'"%F{blue}[ %F{green}%n%F{white}@%F{yellow}%m%F{white}:%F{cyan}%d %F{blue}]"$'\n'
PS1+="%F{cyan}(%1v) %F{white}:> "

另请参阅$CONDA_DEFAULT_ENV:t(来自 csh),它扩展到t存储的路径的 ail $CONDA_DEFAULT_ENV,并且是一种比必须生成一个执行外部basename实用程序并通过类似管道读取其输出的新进程更有效、更可靠的方法$(basename $CONDA_DEFAULT_ENV)(应该有)确实"$(basename -- "$CONDA_DEFAULT_ENV")"如此。

相关内容