Редактировать тему ZSH для имени virtualenv

3

Я использую тему zsh intheloops . Тема выглядит так, когда нет виртуального env. активен

-- an empty line --
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

и когда env. активен,

(env name)
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

Могу ли я заставить его выглядеть так, когда активен какой-либо virtualenv

-- empty line --
(env name) [sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

.zsh-theme file

local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%}"

local host_color="green"
if [ -n "$SSH_CLIENT" ]; then
  local host_color="red"
fi

PROMPT='
%{$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%} '


RPROMPT='${return_status}%{$reset_color%}'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}(%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}) %{$fg[pink]%}⚡%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[grey]%})"
ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE="%{$fg_bold[magenta]%}↓%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE="%{$fg_bold[magenta]%}↑%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE="%{$fg_bold[magenta]%}↕%{$reset_color%}"
    
задан Sourabh 04.10.2013 в 15:46
источник

3 ответа

3

Как изменяется приглашение, определяется в скрипте bin/activate внутри каталога виртуальной среды. Этот файл создается virtualenv из шаблона. К сожалению, единственный способ быстрой модификации, предоставляемый шаблоном, составляет (env name) или что-то другое, установленное с --prompt .

Чтобы изменить запрос так, как вы хотите, я предлагаю обойти настройку приглашения в bin/activate и изменить определение PROMPT в файле темы.

Сначала добавьте следующее к вашему .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

и добавьте %(1V.(%1v).) перед второй строкой определения PROMPT . Он должен выглядеть следующим образом:

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 .

    
ответ дан Adaephon 06.12.2013 в 16:10
2

Oh-my-zsh теперь включает плагин virtualenv , поэтому просто включите его в config .

    
ответ дан Ivan Mesic 22.04.2014 в 20:37
0

Если вы используете prezto , вы можете найти инструкции по отображению активного virtualenv здесь: Ссылка

    
ответ дан creimers 16.01.2015 в 13:50