web-dev-qa-db-fra.com

le nom de virtualenv n'apparaît pas dans l'invite zsh

Récemment, j'ai essayé oh mon zsh, tout semble aller jusqu'à ce que j'essaie virtualevn et virtualenvwrapper. Lorsque j'active un virtualenv (par exemple, un test), lors d'une session normale, je verrai le nom de virtualenv comme suit:

(test)abc@abc:

Mais lorsque je suis passé à zsh, je ne peux pas voir le nom de virtualenv. Même si, j’ai déjà ajouté virtualenv et virtualenvwrapper dans les plugins de oh my zsh. J'ai aussi vérifié le fichier d'activation de mon virtualenv, il contient:

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

Est-ce parce que la comparaison ["x"! = X] retourne vrai?

Mise à jour: J'ai essayé de faire écho à $ PS1 dans le fichier d'activation et j'ai obtenu ceci:

(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%}

Il semble que le $ PS1 soit correct, mais lorsque j'échoie $ PS1 dans le terminal, le (test) est parti. Il semble que le $ PS1 est remplacé par autre chose!

9
Bent

Trouvé le problème, c'est en raison du thème. Le thème que j'ai utilisé dans le cas ci-dessus est pygmalion, il ne vous permettra pas de changer $ PS1. 

Après avoir changé pour le thème robbyrussell, je peux modifier $ PS1 dans le terminal, mais je ne peux toujours pas voir le nom de virtualenv. Après un certain temps de débogage, j'ai trouvé que par défaut le plugin virtualenv de oh my zsh désactivait l'invite:

# disables Prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_Prompt=1

Alors, commentez la ligne dans le plugin virtualenv, le problème est résolu.

11
Bent

Faites ceci dans ~/.zshrc:

plugins=(virtualenv)

POWERLEVEL9K_RIGHT_Prompt_ELEMENTS=(status virtualenv)

Mises en garde:

1 - ajoutez ce plugin en plus des autres plugins que vous avez.

2 - J'utilise le thème POWERLEVEL9K. Peut-être que vous thème

15
William Entriken

La meilleure solution consiste à ajouter les éléments suivants à la fin de votre fichier ~/.zshrc:

export VIRTUAL_ENV_DISABLE_Prompt=

Cela remplacera la valeur dans virtualenv.plugin.zsh - inutile de modifier ce fichier.

14
Greg

Selon ce guide ici

  • Commencez par ajouter la dépendance virtualenv sous plugin dans le fichier .zshrc Si cela ne fonctionne pas, cela signifie que le thème (l'un des thèmes oh-my-zsh) que vous avez sélectionné ne comprend pas le nom de virtualenv dans bash essayez la deuxième étape.

  • Allez dans le fichier ~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme et ajoutez ceci dans l'invite de base %{$fg[green]%}$(virtualenv_Prompt_info)%{$reset_color%}%

NOTE: virtualenv_Prompt_info est le nom de la fonction déclarée dans ~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh. Si votre fichier de plugin a un nom de fonction différent, changez-le en conséquence.

Ou vous pouvez déclarer votre propre fonction dans le fichier ~/.zshrc comme indiqué dans ce guide guide

1
Dave

Je l'ai fait fonctionner en suivant ce lien: https://askubuntu.com/a/387098

Je reproduis la réponse ci-dessous.

La manière dont l'invite est modifiée est définie dans le script bin/activate dans le répertoire de l'environnement virtuel. Ce fichier est créé par virtualenv à partir d'un modèle. Malheureusement, le seul moyen de modification rapide proposé par le modèle consiste à ajouter (env name) au début, ou quoi que ce soit qui est défini avec --Prompt.

Pour modifier l'invite comme vous le souhaitez, nous vous conseillons de contourner le paramètre de l'invite dans bin/activate et de modifier la définition de Prompt dans votre fichier de thème.

Premièrement, ajoutez ce qui suit à votre.zsh-theme (ou .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

et ajoutez %(1V.(%1v).) devant la deuxième ligne de la définition de Prompt. Cela devrait alors ressembler à ceci:

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%} '

Si vous voulez de la couleur, vous pouvez ajouter %(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.) par exemple.

Explication:

virtenv_indicator sera appelé chaque fois avant la création de l'invite. Il vérifie si $VIRTUAL_ENV est défini et non vide. Si tel est le cas, il définit le premier élément du tableau $psvar sur $VIRTUAL_ENV avec tout ce qui précède et y compris le dernier / supprimé (comme basename $VIRTUAL_ENV mais moins cher).

Dans la définition de Prompt%(1V.(%1v).), vérifie si le premier élément de $psvar est défini et non vide (%(1V.true-text.false-text)) et ajoute le contenu de cet élément plus des parenthèses ((%1v))

export VIRTUAL_ENV_DISABLE_Prompt=yes désactive tout paramètre d'invite avec des scripts bin/activate.

0
Labo