11

私はvirtualenvをMacOSX(10.8.2)で実行していますが、それが機能している間(venvをセットアップし、それらを切り替え、アクティブ化および非アクティブ化できます)、機能しない(そして非常に煩わしい)1つのことはターミナルですプロンプトスイッチ。

私の基本的なプロンプトは[\u] \w \n\[\033[0;31m\]$\[\e[0m\]、で、次のようにレンダリングされます。

[hugo] /current/directory/path/
$ 

つまり、改行が含まれています。

virtualenvをアクティブ化すると、次のことが期待されます。

(myproject)[hugo] /current/directory/path/
$ 

しかし、実際にはまったく変化はありません。

/bin/activateスクリプトを開いて、コードを確認しました。

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then
    _OLD_VIRTUAL_PS1="$PS1"
    if [ "x" != x ] ; then
        PS1="$PS1"
    else
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
        # special case for Aspen magic directories
        # see http://www.zetadev.com/software/aspen/
        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
    fi
    fi
    export PS1
fi

PS1最後にエコーを貼り付けると、 varがに設定されていることがわかります(myproject)[\u] \w \n\[\033[0;31m\]$\[\e[0m\]が、何らかの理由で貼り付けられておらず、正しいPS1がエクスポートされていません。

これは私のカスタムプロンプトと関係がありますか、それとも権限の問題ですか?それが機能することを私が知っているので、それは明らかにvirtualenvのものではありません(そして実際、それは私のOSXホストではなく私のvagrantVMで機能します)。

[更新1]

私の間違い-ディレクトリ/リポジトリのステータスに応じてプロンプトを上書きしているgit対応のプロンプトがあるようです。これは、venvプロンプトを強制終了するものです。今、私は両方を行うものが必要です-したがって、フォローアップの質問は次のとおりです:virtualenvとうまく配置される色、git対応、OSXプロンプトを持っている人はいますか?

4

2 に答える 2

16

git-awareプロンプトを設定しているものは何でも、おそらくPROMPT_COMMAND関数を定義しています。.bashrcこれをファイルの最後に追加してみてください。

add_venv_info () {
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then
        _OLD_VIRTUAL_PS1="$PS1"

        if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
            # special case for Aspen magic directories
            # see http://www.zetadev.com/software/aspen/
            PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
        elif [ "$VIRTUAL_ENV" != "" ]; then
            PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
        fi
    fi
    export PS1
}
PROMPT_COMMAND=add_venv_info

Aspenマジックディレクトリとは何ですか?何も思いつきません; これは、仮想環境情報をプロパティに含めるactivateために使用する方法を示すために、スクリプトからコピーされたコードです。PROMPT_COMMANDそれらがあなたの状況に関連していない場合は、必要なPS1=...割り当てを追加するだけです。本当に重要な部分は、1)チェックVIRTUAL_ENV_DISABLE_PROMPTと2)に必要な割り当てを行うことだけPS1です。

于 2013-02-20T18:52:34.780 に答える
6

同じ問題が発生しましたが、上記の解決策はうまくいきませんでした。

私はこれを行うことになりました:( からを分離するための追加のスペースがあることに注意してください(virtenv)$

# Virtual ENV stuff
add_venv_info () {
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then
        VIRT_ENV_TXT=""
        if [ "x" != x ] ; then
            VIRT_ENV_TXT=""
        else
            if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
                # special case for Aspen magic directories
                # see http://www.zetadev.com/software/aspen/
                VIRT_ENV_TXT="[`basename \`dirname \"$VIRTUAL_ENV\"\``]"
            elif [ "$VIRTUAL_ENV" != "" ]; then
                VIRT_ENV_TXT="(`basename \"$VIRTUAL_ENV\"`)"
            fi
        fi
        if [ "${VIRT_ENV_TXT}" != "" ]; then
           echo ${VIRT_ENV_TXT}" "
        fi
    fi
}

# Now we construct the prompt.
# in my case a bunch of lines constructing the complete PS1
# somewhere call the add_venv_info function like below

        PS1=${PS1}"\[\$(job_color)\]\n\$(add_venv_info)\$\[${NC}\] "
于 2014-05-01T13:24:37.830 に答える