Отредактируйте тему ZSH для имени virtualenv

Я использую zsh theme 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 файл

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%}"
3
задан 16.04.2020, 08:55

3 ответа

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

2
ответ дан 16.04.2020, 08:56

Способ изменения приглашения определяется в скрипте 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)), и добавляет содержимое элемента this плюс некоторые скобки ((%1v))

export VIRTUAL_ENV_DISABLE_PROMPT=yes отключает любые быстрое задание скриптами bin/activate.

6
ответ дан 16.04.2020, 08:57

Если вы используете prezto , вы можете найти инструкции по отображению активного virtualenv здесь: https://github.com/sorin-ionescu/prezto/tree/master/ модули / Python # Тематизация

0
ответ дан 16.04.2020, 08:57

Теги

Похожие вопросы