имя virtualenv не отображается в приглашении zsh

недавно я попробую oh my zsh, все выглядит хорошо, пока я не попробую virtualevn и virtualenvwrapper. Когда я активирую virtualenv (e.G test), на обычном bash, я увижу имя virtualenv как:

(test)abc@abc:

но когда я переключился на zsh, я не вижу имя virtualenv. Хотя, я ALR добавить virtualenv и virtualenvwrapper в плагинах oh my zsh. Я также проверил файл активации моего 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 переопределяется чем-то другим!

5 ответов


лучшим решением является добавление следующего в конец вашего~/.файл zshrc:

export VIRTUAL_ENV_DISABLE_PROMPT=

это переопределит значение в virtualenv.плагин.ЗШ - нет необходимости менять этот файл.


нашел проблему, это связано с темой. Тема, которую я использовал в приведенном выше случае, - Пигмалион, это не позволит u изменить $PS1.

после изменения темы robbyrussell я могу изменить $PS1 в терминале, но все еще не вижу имя virtualenv. Через некоторое время отладки я обнаружил, что по умолчанию плагин virtualenv oh my zsh отключает приглашение:

# disables prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_PROMPT=1

поэтому просто прокомментируйте строку в плагине virtualenv, проблема решена.


этого в ~/.zshrc:

plugins=(virtualenv)

POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status virtualenv)

предостережения:

1 -- добавьте этот плагин в дополнение к другим плагинам, которые у вас есть.

2 -- я использую тему POWERLEVEL9K. Может быть, вы тема


согласно этому руководству здесь

  • добавить virtualenv зависимость под plugin в файле .zshrc Если это не работает для вас, то это означает, что выбранная вами тема(одна из тем oh-my-zsh) не включает имя virtualenv в приглашение bash, поэтому попробуйте второй шаг.

  • выберите файл ~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme и добавить в базы приглашения %{$fg[green]%}$(virtualenv_prompt_info)%{$reset_color%}%

Примечание: virtualenv_prompt_info имя функция, которая объявлена в ~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh. Если ваш файл плагина имеет другое имя функции, измените его соответствующим образом.

или вы можете объявить свою собственную функцию в ~/.zshrc файл, как показано в этом руководство


если вы используете conda для запуска виртуальной среды, переменная envorionment будет отличаться. Чтобы выяснить имя среды, в которой хранится имя virtaulenv, введите printenv и в результате. Для меня это CONDA_PROMPT_MODIFIER

после того как вы знаете имя переменной открыть .zshrc и добавьте эту функцию

function virtualenv_info { [ $CONDA_PROMPT_MODIFIER ] && echo `basename $CONDA_PROMPT_MODIFIER` }

и под этим добавьте эту строку

PROMPT="%{$fg[green]%}$(virtualenv_info)%{$reset_color%}%${PROMPT}"

закройте редактор и тип source .zshrc