编辑 ZSH 主题的虚拟环境名称

编辑 ZSH 主题的虚拟环境名称

我使用 zsh 主题intheloops。当没有虚拟环境处于活动状态时,主题看起来像这样

-- an empty line --
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 

当环境处于活动状态时,

(env name)
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 

当某些虚拟环境处于活动状态时我可以让它看起来像这样吗?

-- empty line --
(env name) [sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 

.zsh-theme文件

local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%}"

local host_color="green"
if [ -n "$SSH_CLIENT" ]; then
  local host_color="red"
fi

PROMPT='
%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
%{$fg_bold[cyan]%}❯%{$reset_color%} '


RPROMPT='${return_status}%{$reset_color%}'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}(%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}) %{$fg[pink]%}⚡%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[grey]%})"
ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE="%{$fg_bold[magenta]%}↓%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE="%{$fg_bold[magenta]%}↑%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE="%{$fg_bold[magenta]%}↕%{$reset_color%}"

答案1

提示符的更改方式在虚拟环境目录内的脚本中定义。此文件由模板bin/activate创建。不幸的是,模板提供的唯一提示符修改方法是添加前缀或使用 进行设置。virtualenv(env name)--prompt

为了按照您想要的方式修改提示,我建议绕过提示的设置并修改主题文件中bin/activate的定义。PROMPT

首先将以下内容添加到您的.zsh-theme(或.zshrc

export VIRTUAL_ENV_DISABLE_PROMPT=yes

function virtenv_indicator {
    if [[ -z $VIRTUAL_ENV ]] then
        psvar[1]=''
    else
        psvar[1]=${VIRTUAL_ENV##*/}
    fi
}

add-zsh-hook precmd virtenv_indicator

%(1V.(%1v).)并在 的定义的第二行前面添加PROMPT。它应该看起来像这样:

PROMPT='
%(1V.(%1v).)%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
%{$fg_bold[cyan]%}❯%{$reset_color%} '

%(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.)例如,如果您想要一些颜色,您可以添加。

解释

virtenv_indicator每次创建提示之前都会被调用。它会检查是否$VIRTUAL_ENV已设置且不为空。如果是,它会将数组的第一个元素设置$psvar$VIRTUAL_ENV,并将最后一个元素之前的所有内容/(类似basename $VIRTUAL_ENV但更便宜)移除

在的定义中PROMPT %(1V.(%1v).)检查的第一个元素是否$psvar被设置并且不为空(%(1V.true-text.false-text))并添加此元素的内容加上一些括号((%1v)

export VIRTUAL_ENV_DISABLE_PROMPT=yes禁用脚本的任何提示设置bin/activate

答案2

Oh-my-zsh现在包括一个virtualenv插件,因此只需在中启用它即可config

答案3

如果你使用价格,您可以在这里找到有关如何显示活动虚拟环境的说明:https://github.com/sorin-ionescu/prezto/tree/master/modules/python#theming

相关内容