为 virtualenv 名称编辑 ZSH 主题

Sou*_*abh 3 themes zsh prompt virtualenv

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

-- an empty line --
[sourabh@skynet] ~/Code/django_apps/cope (master) ? 
?
Run Code Online (Sandbox Code Playgroud)

当一个环境。活跃,

(env name)
[sourabh@skynet] ~/Code/django_apps/cope (master) ? 
?
Run Code Online (Sandbox Code Playgroud)

当某些 virtualenv 处于活动状态时,我可以使它看起来像这样吗

-- empty line --
(env name) [sourabh@skynet] ~/Code/django_apps/cope (master) ? 
?
Run Code Online (Sandbox Code Playgroud)

.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%}"
Run Code Online (Sandbox Code Playgroud)

Ada*_*hon 6

如何更改提示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
Run Code Online (Sandbox Code Playgroud)

%(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%} '
Run Code Online (Sandbox Code Playgroud)

如果你想要一些颜色,你可以添加%(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)) 并添加 this 元素的内容加上一些括号 ( (%1v))

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