最近、私の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は他の何かによってオーバーライドされているようです!
問題が見つかりました、それはテーマによるものです。上記のケースで使用したテーマはpygmalionであり、$ PS1を変更することはできません。
Robbyrussellテーマに変更した後、ターミナルで$ PS1を変更できますが、virtualenv名が表示されません。しばらくデバッグした後、デフォルトでoh my zshのvirtualenvプラグインがプロンプトを無効にしていることがわかりました。
# disables Prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_Prompt=1
したがって、virtualenvプラグインの行をコメントアウトするだけで、問題は解決しました。
~/.zshrc
でこれを行います:
plugins=(virtualenv)
POWERLEVEL9K_RIGHT_Prompt_ELEMENTS=(status virtualenv)
警告:
1-所有している他のプラグインに加えて、そのプラグインを追加します。
2-POWERLEVEL9Kテーマを使用しています。たぶんあなたのテーマ
最良の解決策は、〜/ .zshrcファイルの最後に次を追加することです。
export VIRTUAL_ENV_DISABLE_Prompt=
これにより、virtualenv.plugin.zshの値がオーバーライドされます。そのファイルを変更する必要はありません。
このガイドによると こちら
最初に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
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
_と入力します
このリンクに従って動作するようにしました: 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
_スクリプトによるプロンプト設定を無効にします。