動態

詳情 返回 返回

oh-my-zsh 自定義終端 PS1中的 Conda 和 Virtualenv 環境標識 - 動態 詳情

起因是因為在安裝完 Conda 後每次進入終端,都會自動進入名為“base”的 Python 虛擬環境,這本來沒什麼,而我用的 shell 工具是 oh-my-zsh,主題是 dst,這個主題代碼貌似有點問題,導致虛擬環境與後面的用户名@主機名等信息打印了兩行,類似如下效果:

(base)
mz@mac:~                                                       [13:20:58]
$ 

看起來很彆扭,而我想要下面的這種效果:

mz@mac:(base) ~                                                [13:20:58]
$ 

另外,既然 Conda 都改了,那 Virtualenv 也順便做了,具體步驟如下:

首先,因為是自定義位置顯示環境信息,所以需要做一些配置,來關掉前綴顯示:

  1. Conda 添加如下配置,位置在~/.condarc,沒有該文件則需要新建:

    # 是否自動激活 base 環境(如果需要開啓可以跳過這條,或者改成 true)
    auto_activate_base: false
    # 是否更改 PS1(PS1前面是否加環境標識)
    changeps1: false
  2. Virtualenv 也需要關閉,方法是添加一條環境變量(添加完別忘了刷新 source xxx):

    export VIRTUAL_ENV_DISABLE_PROMPT=1

然後,是 dst 主題的配置,位置在~/.oh-my-zsh/themes/dst.zsh-theme, 其它主題也可以仿照這個配置來。

另:查詢 oh-my-zsh 當前主題:echo $ZSH_THEME

ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[green]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}!"
ZSH_THEME_GIT_PROMPT_CLEAN=""

# 這裏是新增代碼
local env_prompt='$(env_prompt_info)'
env_prompt_info() {
    # Conda info
    if [ -n "$CONDA_DEFAULT_ENV" ]
    then
        echo -n "%{$fg[green]%}($CONDA_DEFAULT_ENV)%{$reset_color%} "
    # Virtualenv info
    elif [ -n "$VIRTUAL_ENV" ]
    then
        VIRTUAL_ENV_NAME=`basename $VIRTUAL_ENV`
        echo -n "%{$fg[green]%}($VIRTUAL_ENV_NAME)%{$reset_color%} "
    else
        echo -n ""
    fi
}
# 結束

function prompt_char {
    if [ $UID -eq 0 ]; then 
        echo "%{$fg[red]%}#%{$reset_color%}"; 
    else 
        echo $; 
    fi
}

# 注意這裏用英文半角的雙引號,而不是單引號
# 在合適的位置上加入`${env_prompt}`就可以了
PROMPT="\
%(?,,%{$fg[red]%}FAIL %{$reset_color%})\
%{$fg[magenta]%}\
%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%}:${env_prompt}%{$fg_bold[blue]%}%~%{$reset_color%}$(git_prompt_info)
$(prompt_char) "

RPROMPT='%{$fg[green]%}[%*]%{$reset_color%}'

最後,保存並退出,source ~/.zshrc,並開啓一個虛擬環境就可以看到效果了。

Add a new 評論

Some HTML is okay.