如何在 xonsh 提示符中有条件地使用 {env_name}
How to use {env_name} conditionally in a xonsh prompt
在 xonsh
shell 中如何使用虚拟环境的名称作为 $PROMPT
定义中的条件?
(更详细:我有一个名为 'xonsh'
的虚拟环境用于 xonsh shell 本身,但我不希望在提示中显示此 venv,但任何其他激活的 venv应该在提示中显示。)
首先查看 xonsh/prompt/env.py
以了解我们如何定义 env_name
函数——因为您使用 virtualenv,您可以在 xonshrc
中执行类似以下操作:
import os.path
def env_name_cust(pre_chars="(", post_chars=")"):
"""Extract the current environment name from $VIRTUAL_ENV
"""
env_path = __xonsh__.env.get("VIRTUAL_ENV", "")
env_name = os.path.basename(env_path)
if env_name and env_name != 'xonsh':
return pre_chars + env_name + post_chars
然后将该函数添加到 $PROMPT_FIELDS
字典中:
$PROMPT_FIELDS['env_name_cust'] = env_name_cust
然后您可以在 $PROMPT
格式字符串中使用 {env_name_cust}
代替默认的 {env_name}
如果您愿意,您也可以使用 ${...}
代替 __xonsh__.env
。
在 xonsh
shell 中如何使用虚拟环境的名称作为 $PROMPT
定义中的条件?
(更详细:我有一个名为 'xonsh'
的虚拟环境用于 xonsh shell 本身,但我不希望在提示中显示此 venv,但任何其他激活的 venv应该在提示中显示。)
首先查看 xonsh/prompt/env.py
以了解我们如何定义 env_name
函数——因为您使用 virtualenv,您可以在 xonshrc
中执行类似以下操作:
import os.path
def env_name_cust(pre_chars="(", post_chars=")"):
"""Extract the current environment name from $VIRTUAL_ENV
"""
env_path = __xonsh__.env.get("VIRTUAL_ENV", "")
env_name = os.path.basename(env_path)
if env_name and env_name != 'xonsh':
return pre_chars + env_name + post_chars
然后将该函数添加到 $PROMPT_FIELDS
字典中:
$PROMPT_FIELDS['env_name_cust'] = env_name_cust
然后您可以在 $PROMPT
格式字符串中使用 {env_name_cust}
代替默认的 {env_name}
如果您愿意,您也可以使用 ${...}
代替 __xonsh__.env
。