Bash zsh提示符中未显示虚拟机名称
最近,我试了一下哦,我的zsh,在我尝试virtualevn和virtualenvwrapper之前,一切看起来都很好。当我在普通bash上激活virtualenv(例如test)时,我会看到virtualenv名称,如:Bash zsh提示符中未显示虚拟机名称,bash,zsh,oh-my-zsh,Bash,Zsh,Oh My Zsh,最近,我试了一下哦,我的zsh,在我尝试virtualevn和virtualenvwrapper之前,一切看起来都很好。当我在普通bash上激活virtualenv(例如test)时,我会看到virtualenv名称,如: (test)abc@abc: 但当我切换到zsh时,我看不到virtualenv名称。尽管如此,我还是在oh my zsh的插件中添加了virtualenv和virtualenvwrapper。我还检查了我的virtualenv的激活文件,它包含: f [ -z "${VI
(test)abc@abc:
但当我切换到zsh时,我看不到virtualenv名称。尽管如此,我还是在oh my zsh的插件中添加了virtualenv和virtualenvwrapper。我还检查了我的virtualenv的激活文件,它包含:
f [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="$PS1"
if [ "x" != x ] ; then
PS1="$PS1"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
fi
export PS1
fi
是因为比较[“x”!=x]返回true吗
更新:
我尝试在激活文件中回显$PS1,得到以下结果:
(test) %{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}%{$fg[cyan]%}⇒%{$reset_color%}
$PS1似乎是正确的,但当我在终端中回显$PS1时,(测试)就消失了。似乎$PS1被其他东西覆盖了 发现问题,是因为主题。我在上述案例中使用的主题是pygmalion,它不允许您更改$PS1 更改为robbyrussell主题后,我可以在终端中更改$PS1,但仍然无法看到virtualenv名称。经过一段时间的调试,我发现默认情况下oh my zsh的virtualenv插件会禁用提示:
# disables prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_PROMPT=1
所以只需在virtualenv插件中注释掉这一行,问题就解决了。最好的解决方案是在~/.zshrc文件的末尾添加以下内容:
export VIRTUAL_ENV_DISABLE_PROMPT=
这将覆盖virtualenv.plugin.zsh中的值-无需更改该文件。在
~/.zshrc
中执行此操作:
plugins=(virtualenv)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status virtualenv)
注意事项:
1--除了您拥有的其他插件之外,还要添加该插件
2--我使用的是POWERLEVEL9K主题。也许您可以根据本指南来设置主题
- 首先在文件
如果这对您不起作用,那么这意味着您选择的主题(oh my zsh主题之一)在bash提示符中不包含virtualenv名称,所以请尝试第二步.zshrc
- 转到文件
,并将其添加到基本提示中~/.oh my zsh/themes/YOUR_THEME\u NAME.zsh THEME
%{$fg[绿色]]]}$(虚拟提示信息)%{$reset\U color%}%
virtualenv\u prompt\u info
是在~/.oh my zsh/plugins/virtualenv/virtualenv.plugin.zsh
中声明的函数名。如果你的插件文件有不同的函数名,那么相应地修改它
或者,您可以在
~/.zshrc
文件中声明自己的函数,如本文件所示。如果您使用conda启动虚拟环境,则环境变量将不同。要找出保存virtaulenv名称的环境名称,请键入printenv
,并查看输出。对我来说,它是CONDA\u PROMPT\u修饰符
知道变量open.zshrc的名称后,添加此函数
function virtualenv\u info{
[$CONDA_提示符_修饰符]&&echo`basename$CONDA_提示符_修饰符`
}
下面加上这一行
PROMPT=“%{$fg[green]]]}$(virtualenv\u info)%{$reset\u color%}%${PROMPT}”
关闭编辑器并键入
source.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
我重复下面的答案
如何更改提示是在虚拟环境目录中的脚本bin/activate
中定义的。此文件由virtualenv
从模板创建。不幸的是,模板提供的提示修改的唯一方法是在(env name)
前面加上前缀,或者使用--prompt
设置的任何内容
要以您想要的方式修改提示,我建议绕过bin/activate
中的提示设置,并修改主题文件中prompt
的定义
首先将以下内容添加到.zsh主题
(或.zshrc
)
并在提示符
定义的第二行前面添加%(1V.(%1V)。
)。然后应该是这样的:
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[黄色]]}(%1V)%{$reset_color%}。)
例如
说明:
virtenv_指示器
将在每次创建提示之前调用。它检查$VIRTUAL_ENV
是否已设置且不为空。如果是这样,它会将$psvar
数组的第一个元素设置为$VIRTUAL_ENV
,删除之前的所有内容,包括最后一个/
(如basename$VIRTUAL_ENV
,但成本较低)
在提示符的定义中%(1V.(%1V)。
检查$psvar
的第一个元素是否已设置且不为空(%(1V.true text.false text)
),并添加此元素的内容和一些括号((%1V)
)
export-VIRTUAL\u-ENV\u-DISABLE\u-PROMPT=yes
通过bin/activate
脚本禁用任何提示设置。My设置为默认主题(也称为robbyrussell
)显示Python virtualenv名称
.zshrc
文件中的
virtualenv
添加到插件中
添加自定义函数:
function virtualenv_info {
[ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
}
导航到您的主题
我的主题是zsh
的默认主题:
$ vim ~/.oh-my-zsh/themes/robbyrussell.zsh-theme
在现有的提示符
命令之后添加此命令:
PROMPT+='%{$fg[green]%}$(virtualenv_info)%{$reset_color%}%'
最后
$ source ~/.zshrc
PS:您可以在提示符+之前或之后添加姓名或一些空格
希望有帮助 如果您使用自制软件安装了Anaconda:
brew tap homebrew/cask-versions
brew cask install anaconda
您正在使用POWERLEVEL9K主题
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
您只需将这一行添加到.zshrc的末尾:
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time anaconda)
没有必要使用virtualenv插件
编辑:
如果您已经为bash安装了conda,并且您得到:
zsh: command not found: conda
运行以下命令:
~/anaconda3/bin/conda init zsh
我正在使用oh my zsh pygmalion,这对我很有用:
- 在~/.zshrc中添加
virtualenv
插件
- 打开~/.oh my zsh/themes/pygmalion.zsh-themes,修改
pro
prompt_pygmalion_precmd(){
setopt localoptions extendedglob
local gitinfo=$(git_prompt_info)
local gitinfo_nocolor=${gitinfo//\%\{[^\}]##\}}
local exp_nocolor="$(print -P \"$base_prompt_nocolor$gitinfo_nocolor$post_prompt_nocolor\")"
local prompt_length=${#exp_nocolor}
local python_venv=$(virtualenv_prompt_info)
PROMPT="${python_venv}${base_prompt}${gitinfo}${post_prompt}"
}
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
#export PS1='($(pyenv version-name)) '$PS1
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
export BASE_PROMPT=$PS1
function updatePrompt {
if [[ "$(pyenv version-name)" != "system" ]]; then
# the next line should be double quote; single quote would not work for me
export PS1="($(pyenv version-name)) "$BASE_PROMPT
else
export PS1=$BASE_PROMPT
fi
}
export PROMPT_COMMAND='updatePrompt'
precmd() { eval '$PROMPT_COMMAND' } # this line is necessary for zsh