web-dev-qa-db-ja.com

zenvプロンプトにvirtualenv名が表示されない

最近、私のzshを試してみました。virtualevnとvirtualenvwrapperを試すまで、すべてがうまく見えます。 virtualenvをアクティブにすると(テストなど)、通常のbashで、次のようなvirtualenv名が表示されます。

(test)abc@abc:

しかし、zshに切り替えたとき、virtualenv名が表示されません。にもかかわらず、私は私のzshのプラグインにvirtualenvとvirtualenvwrapperを追加します。 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は他の何かによってオーバーライドされているようです!

20
Bent

問題が見つかりました、それはテーマによるものです。上記のケースで使用したテーマはpygmalionであり、$ PS1を変更することはできません。

Robbyrussellテーマに変更した後、ターミナルで$ PS1を変更できますが、virtualenv名が表示されません。しばらくデバッグした後、デフォルトでoh my zshのvirtualenvプラグインがプロンプトを無効にしていることがわかりました。

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

したがって、virtualenvプラグインの行をコメントアウトするだけで、問題は解決しました。

13
Bent

~/.zshrcでこれを行います:

plugins=(virtualenv)

POWERLEVEL9K_RIGHT_Prompt_ELEMENTS=(status virtualenv)

警告:

1-所有している他のプラグインに加えて、そのプラグインを追加します。

2-POWERLEVEL9Kテーマを使用しています。たぶんあなたのテーマ

33

最良の解決策は、〜/ .zshrcファイルの最後に次を追加することです。

export VIRTUAL_ENV_DISABLE_Prompt=

これにより、virtualenv.plugin.zshの値がオーバーライドされます。そのファイルを変更する必要はありません。

20
Greg

このガイドによると こちら

  • 最初にvirtualenv依存関係をファイル_.zshrc_のpluginの下に追加しますこれがうまくいかない場合は、テーマ(oh-my-zshテーマの1つ)があることを意味しますselectedはbashプロンプトにvirtualenv名を含まないため、2番目のステップを試してください。

  • ファイル_~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme_に移動し、これをベースプロンプト%{$fg[green]%}$(virtualenv_Prompt_info)%{$reset_color%}%に追加します

[〜#〜] note [〜#〜]:_virtualenv_Prompt_info_は_~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh_で宣言されている関数の名前です。プラグインファイルの関数名が異なる場合は、それに応じて変更してください。

または、次のように_~/.zshrc_ファイルで独自の関数を宣言できます guide

2
Yashashvi

Condaを使用して仮想環境を開始する場合、環境変数は異なります。 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_と入力します

2
Brian McCall

このリンクに従って動作するようにしました: https://askubuntu.com/a/387098

以下の答えを再現します。

プロンプトの変更方法は、仮想環境ディレクトリ内のスクリプト_bin/activate_で定義されています。このファイルは、テンプレートからvirtualenvによって作成されます。残念ながら、テンプレートによって提供されるプロンプト変更の唯一の方法は、_(env name)_または_--Prompt_で設定されたものを先頭に追加することです。

必要に応じてプロンプトを変更するには、_bin/activate_のプロンプトの設定を回避し、テーマファイルのPromptの定義を変更することをお勧めします。

最初に次をyour _.zsh-theme_(または_.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
_

Promptの定義の2行目の前に%(1V.(%1v).)を追加します。これは次のようになります。

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

何らかの色が必要な場合は、たとえば%(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.)を追加できます。

説明

_virtenv_indicator_は、プロンプトが作成される前に毎回呼び出されます。 _$VIRTUAL_ENV_が設定されており、空ではないかどうかを確認します。その場合、_$psvar_配列の最初の要素を_$VIRTUAL_ENV_に設定し、直前の_/_をすべて削除してから(_basename $VIRTUAL_ENV_のように、より安価に)

Prompt%(1V.(%1v).)の定義では、_$psvar_の最初の要素が空でなく設定されているかどうかを確認し(%(1V.true-text.false-text))、この要素のコンテンツを追加しますプラス括弧(_(%1v)_)

_export VIRTUAL_ENV_DISABLE_Prompt=yes_は、_bin/activate_スクリプトによるプロンプト設定を無効にします。

0
Labo