wake-up-neo.com

virtualenv-Name wird nicht in der zsh-Eingabeaufforderung angezeigt

Vor kurzem probiere ich ach meine Zsh aus, alles sieht gut aus, bis ich virtualevn und virtualenvwrapper probiere. Wenn ich eine virtualenv (z. B. test) aktiviere, sehe ich bei normaler bash den Namen der virtualenv wie folgt:

(test)[email protected]:

Wenn ich zu zsh gewechselt bin, kann ich den Namen der virtuellen Umgebung nicht sehen. Ich füge zwar in den Plugins von oh my zsh virtualenv und virtualenvwrapper hinzu. Ich habe auch die Aktivierungsdatei meiner Virtualenv überprüft, die Folgendes enthält:

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

Liegt es daran, dass der Vergleich ["x"! = X] wahr zurückgibt?

Aktualisiert: Ich habe versucht, $ PS1 in der Aktivierungsdatei zu wiederholen, und habe folgendes erhalten:

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

Es sieht so aus, als wäre die $ PS1 korrekt, aber wenn ich $ PS1 im Terminal wiederhole, ist der (Test) weg. Es scheint, dass die $ PS1 von etwas anderem überschrieben wird!

9
Bent

Das Problem gefunden, liegt am Thema. Das Thema, das ich in dem obigen Fall verwendet habe, ist Pygmalion. Es erlaubt Ihnen nicht, $ PS1 zu ändern. 

Nachdem ich das Robbyrussell-Design geändert habe, kann ich $ PS1 im Terminal ändern, aber den Namen der virtualenv immer noch nicht sehen. Nach einer Weile des Debugging habe ich festgestellt, dass standardmäßig das Plug-In für die virtuelle Umgebung von oh my zsh die Eingabeaufforderung deaktiviert:

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

Kommentieren Sie also die Zeile im virtualenv plugin aus, Problem gelöst.

11
Bent

Tun Sie dies in ~/.zshrc:

plugins=(virtualenv)

POWERLEVEL9K_RIGHT_Prompt_ELEMENTS=(status virtualenv)

Vorsichtsmaßnahmen:

1 - Fügen Sie dieses Plugin zusätzlich zu anderen Plugins hinzu.

2 - Ich verwende das Thema POWERLEVEL9K. Vielleicht dein Thema

15

Am besten fügen Sie am Ende Ihrer Datei ~/.zshrc Folgendes hinzu:

export VIRTUAL_ENV_DISABLE_Prompt=

Dadurch wird der Wert in virtualenv.plugin.zsh überschrieben. Die Datei muss nicht geändert werden.

14
Greg

Gemäß diesem Leitfaden hier

  • Fügen Sie zunächst virtualenv Abhängigkeit unter plugin in Datei .zshrc Hinzu. Wenn dies für Sie nicht funktioniert, bedeutet dies, dass das von Ihnen ausgewählte Design (oh-my-zsh-Design) den Namen der virtuellen Umgebung nicht in bash enthält Prompt, also probiere den zweiten Schritt.

  • Gehen Sie zur Datei ~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme und fügen Sie dies in der Basis-Eingabeaufforderung %{$fg[green]%}$(virtualenv_Prompt_info)%{$reset_color%}% hinzu.

NOTE: virtualenv_Prompt_info ist der Name der Funktion, die in ~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh deklariert ist. Wenn Ihre Plugin-Datei einen anderen Funktionsnamen hat, ändern Sie ihn entsprechend.

Oder Sie können Ihre eigene Funktion in ~/.zshrc-Datei deklarieren, wie in diesem guide gezeigt.

1
Dave

Ich habe es mit diesem Link erreicht: https://askubuntu.com/a/387098

Ich reproduziere die Antwort unten.

Wie die Eingabeaufforderung geändert wird, wird im Skript bin/activate im Verzeichnis der virtuellen Umgebung definiert. Diese Datei wird von virtualenv aus einer Vorlage erstellt. Leider ist die einzige Möglichkeit, die von der Vorlage bereitgestellte Eingabeaufforderung zu ändern, das Voranstellen von (env name) oder was auch immer mit --Prompt eingestellt ist.

Um die Aufforderung in der gewünschten Weise zu ändern, würde ich vorschlagen, die Einstellung der Aufforderung in bin/activate zu umgehen und die Definition von Prompt in Ihrer Designdatei zu ändern.

Fügen Sie zunächst Folgendes zu Ihrem.zsh-theme (oder .zshrc) hinzu

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

und fügen Sie %(1V.(%1v).) vor der zweiten Zeile der Definition von Prompt ein. Es sollte dann so aussehen:

Prompt='
%(1V.(%1v).)%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${Host_color}]%}%[email protected]%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%} '

Wenn Sie etwas Farbe wünschen, können Sie beispielsweise %(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.) hinzufügen.

Erklärung :

virtenv_indicator wird jedes Mal aufgerufen, bevor die Eingabeaufforderung erstellt wird. Es wird geprüft, ob $VIRTUAL_ENV eingestellt und nicht leer ist. Wenn ja, setzt es das erste Element des $psvar-Arrays auf $VIRTUAL_ENV, wobei alles vor und der letzte / entfernt wird (wie basename $VIRTUAL_ENV, aber weniger teuer).

In der Definition von Prompt%(1V.(%1v).) wird geprüft, ob das erste Element von $psvar gesetzt und nicht leer ist (%(1V.true-text.false-text)), und der Inhalt dieses Elements plus einige Klammern ((%1v)) hinzugefügt.

export VIRTUAL_ENV_DISABLE_Prompt=yes deaktiviert alle Prompt-Einstellungen durch bin/activate-Skripts.

0
Labo

Wenn Sie Conda zum Starten Ihrer virtuellen Umgebung verwenden, unterscheidet sich die Umgebungsvariable. Um den Namen der Umgebung herauszufinden, die den Namen Ihres virtuellen Namens enthält, geben Sie printenv ein und sehen Sie sich die Ausgabe an. Für mich ist es CONDA_Prompt_MODIFIER

nachdem Sie den Namen der Variablen kennen, öffnen Sie .zshrc und fügen Sie diese Funktion hinzu

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

und darunter fügen Sie diese Zeile hinzu

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

schließen Sie den Editor und geben Sie source .zshrc ein.

0
Brian McCall