2016-08-13 4 views
3

Vor kurzem gebe ich einen Versuch auf oh mein zsh, alles sieht gut aus, bis ich versuchen virtualevn und virtualenvwrapper. Wenn ich einen virtualenv (z-Test), auf normalen bash aktivieren, werde ich die virtualenv Namen wie sehen:virtualenv name nicht in zsh prompt

(test)[email protected]: 

Aber wenn ich zsh schaltet, kann ich nicht virtualenv Namen. Obwohl ich noch virtualenv und virtualenvwrapper in Plugins von oh my zsh hinzufügen. Ich habe auch die activate Datei meines virtualenv, es 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 

Ist es, weil der Vergleich [ "x" = x!] Return true?

Aktualisiert: Ich versuchte $ PS1 in activate Datei Echo und bekam dies:

(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 scheint, der $ PS1 richtig ist, aber wenn ich echo $ PS1 im Terminal, die (Test) ist weg. Es scheint, dass die $ PS1 von etwas anderem überschrieben wird!

+1

'[ "x"= x!]' Immer wieder _false_; es vergleicht das wörtliche "x" mit sich selbst. – mklement0

+0

dann, warum der Basisname nicht auf $ PS1 prepend? – Bent

+0

Startet die Eingabeaufforderung mit '()'? Beachten Sie, dass Sie brauchen nicht '\' -escape die '„'Zeichen. In' \“$ VIRTUAL_ENV \" '(obwohl es nicht schaden sollte). – mklement0

Antwort

6

Das Problem gefunden, es liegt an dem Thema. Das Thema, das ich im obigen Fall verwendet habe, ist pygmalion, es wird dir nicht erlauben, $ PS1 zu ändern.

Nach geändert zu robbyrussell Thema, kann ich $ PS1 im Terminal ändern, aber immer noch nicht den Namen virtualenv sehen. Nach einer Weile Debuggen fand ich, dass das virtualenv Plugin von oh mein zsh die Eingabeaufforderung standardmäßig deaktivieren:

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

So kommentieren Sie einfach die Zeile in virtualenv Plugin, Problem gelöst.

+1

es nicht funktioniert ich habe dies auf Kommentar, und zu den Plugins hinzugefügt, aber immer noch nicht funktioniert. :( –

9

Die beste Lösung ist folgendes zu Ende Ihrer ~/.zshrc Datei hinzufügen:

export VIRTUAL_ENV_DISABLE_PROMPT= 

Dies wird außer Kraft den Wert in virtualenv.plugin.zsh - keine Notwendigkeit, diese Datei zu ändern.

2

Tun Sie dies in ~/.zshrc:

plugins=(virtualenv) 

POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status virtualenv) 

Caveats:

1 - das Plugin zusätzlich zu anderen Plug-in hinzufügen, die Sie haben.

2 - Ich benutze das Thema POWERLEVEL9K. Vielleicht Thema, das Sie

+0

Das war ein sehr prägnante Antwort, die meiner Situation entsprach, da ich auch das gleiche Thema verwende. Die Umgebung wird auf der rechten Seite des Bildschirms angezeigt. –

0

Gemäß diesem Handbuch here

  • Erste virtualenv Abhängigkeit unter plugin in Datei .zshrc hinzufügen Wenn dies nicht für Sie arbeiten, dann bedeutet es, dass das Thema (eine von oh-my -zh-Thema), die Sie ausgewählt haben, enthält nicht den Namen virtualenv in der Bash-Eingabeaufforderung, also versuchen Sie den zweiten Schritt.virtualenv_prompt_info ist der Name der Funktion, die in ~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh deklariert ist:

  • Go ~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme und fügen Sie diese in Basis Prompt %{$fg[green]%}$(virtualenv_prompt_info)%{$reset_color%}%

HINWEIS Datei. Wenn Ihre Plugin-Datei einen anderen Funktionsnamen hat, dann ändern Sie sie entsprechend.

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