如何修改Conda的'source activate' PS1行为

20

我当前的 bash ps1 是这样的:

bldred='\e[1;31m' # Red
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
txtrst='\e[0m'    # Text Reset - Useful for avoiding color bleed

export PS1="\n\[$bldred\]\u\[$txtrst\]@\[$bldwht\]\h\[$txtrst\]:\[$bldcyn\]\w\[$txtrst\]$ "

然而,运行:

source activate <env-name-here>

默认情况下会告诉condaPS1前面添加env-name

(<env-name-here>)
user@short-domain:fullpath$

有没有一种方法可以告诉condaenv-name插入到我的PS1中,特别是在换行符后面?


我完全不了解 conda,但是你是否可以将字符串 <env-name-here>\n 传递给它,并从 PS1 中删除 \n? - Aaron
@Aaron,我在这里解释了如何做到你所描述的内容:https://dev59.com/B7zpa4cB1Zd3GeqPEh6a。jkarimi似乎正在询问如何将`<env-name-here>保持在与其余提示字符串相同的行上,因此在<env-name-here>`中添加尾随换行符将失去意义。 - drmuelr
虽然不是重点,但是你不需要导出PS1。 - wjandrea
2个回答

19

Conda有一个设置,可以禁用更改提示符:changeps1: False(在~/.condarc中)。然后,您可以自行添加此内容($(basename "$CONDA_PREFIX"))。

这类似于virtualenv,如果设置了$VIRTUAL_ENV_DISABLE_PROMPT,它将不会更新提示符,因此您可以自行打印$(basename "$VIRTUAL_ENV")


6
我在我的PS1中使用了"CONDA_PROMPT_MODIFIER"代替"CONDA_PREFIX",以实现更加顺畅的集成。 - Adriano
@Adriano 如果您不需要将 CONDA_PROMPT_MODIFIER 插入到 PS1 的中间(即在前面添加仍然可以),那么我发布的这个问题和答案更加简洁:https://dev59.com/B7zpa4cB1Zd3GeqPEh6a - drmuelr

13

我发现最简单的解决方案是将换行符从PS1移动到PROMPT_COMMAND中:

最简单的解决方案是将PS1中的换行符移到PROMPT_COMMAND中:

PROMPT_COMMAND="printf '\n'"
export PS1="\[$bldred\]\u\[$txtrst\]@\[$bldwht\]\h\[$txtrst\]:\[$bldcyn\]\w\[$txtrst\]$ "

这使得 conda 能够保持其默认的 PS1 行为,同时使用换行符分隔 bash 命令:

user@short-domain:fullpath$ source activate <env-name-here>

(<env-name-here>) user@short-domain:fullpath$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接