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!
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.
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
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.
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
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
.