1

Я недавно установил zsh и нашел время, чтобы правильно его настроить, краткий обзор пробных методов:

setopt prompt_subst Используйте prompt_subst, чтобы мы могли просто использовать переменные vcs_info, и они будут обновляться во время выполнения.

Он работает с цветами и не должен ничего ломать, пытаясь модифицировать PS1. однако, я не могу понять, каковы недостатки для его включения?

psvar Используйте psvar для замены командной строки, работает, но портит цвета.

Обновляйте PS1 каждый раз. Хорошо работает, но все, что пытается изменить PS1, терпит неудачу, когда происходит сброс. Может быть исправлено с помощью хаков, но это слишком уродливый / хрупкий IMO, так что пропустите этот.

-

Итак, подведем итог:

  1. Какие минусы есть у включения prompt_subst?
  2. Есть ли способ заставить цвета работать с psvar

Если prompt_subst имеет существенные недостатки, то 2 будет наилучшей альтернативой, если это вообще возможно, 3 немного хрупкая, поэтому лучше не использовать ее.

Соответствующая часть моего .zshrc

...

autoload -Uz vcs_info

# Needs to be enabled for the prompt to change
setopt prompt_subst

# Formats
VCS_FORMAT="%{$fg_bold[magenta]%}(%{$reset_color%}%{$fg_bold[yellow]%}%b%{$reset_color%}"
VCS_APPEND="%{$fg_bold[magenta]%})%{$reset_color%}"
VCS_NORMAL_FORMAT="${VCS_FORMAT}%{$fg_bold[magenta]%}:%{$reset_color%}%{$fg_bold[green]%}%8.8i%{$reset_color%}${VCS_APPEND}"
VCS_ACTION_FORMAT="${VCS_FORMAT}%{$fg_bold[magenta]%}:%{$reset_color%}%{$fg_bold[red]%}%a%{$reset_color%}${VCS_APPEND}"

zstyle ':vcs_info:*' enable git hg svn 
zstyle ':vcs_info:*' get-revision true

zstyle ':vcs_info:*' formats $VCS_NORMAL_FORMAT 
zstyle ':vcs_info:*' actionformats $VCS_ACTION_FORMAT

precmd () {
    vcs_info

    PS1_STR=""
    PS1_STR="${PS1_STR}%{$fg_bold[magenta]%}[%{$reset_color%}%{$fg_bold[green]%}%m%{$reset_color%}%{$fg_bold[magenta]%}]%{$reset_color%}" #hostname
    PS1_STR="${PS1_STR}%{$fg_bold[magenta]%}[%{$reset_color%}%{$fg_bold[blue]%}%n%{$reset_color%}%{$fg_bold[magenta]%}]%{$reset_color%}"  #user
    PS1_STR="${PS1_STR}%{$fg_bold[magenta]%}[%{$reset_color%}%{$fg_bold[cyan]%}%1~%{$reset_color%}%{$fg_bold[magenta]%}]%{$reset_color%}" #folder
    PS1_STR="${PS1_STR}${vcs_info_msg_0_}\$ "                                                                                             #branch/end
}   

export PS1='${PS1_STR}'

...

0