Я недавно установил zsh и нашел время, чтобы правильно его настроить, краткий обзор пробных методов:
setopt prompt_subst Используйте prompt_subst, чтобы мы могли просто использовать переменные vcs_info, и они будут обновляться во время выполнения.
Он работает с цветами и не должен ничего ломать, пытаясь модифицировать PS1. однако, я не могу понять, каковы недостатки для его включения?
psvar Используйте psvar для замены командной строки, работает, но портит цвета.
Обновляйте PS1 каждый раз. Хорошо работает, но все, что пытается изменить PS1, терпит неудачу, когда происходит сброс. Может быть исправлено с помощью хаков, но это слишком уродливый / хрупкий IMO, так что пропустите этот.
-
Итак, подведем итог:
- Какие минусы есть у включения prompt_subst?
- Есть ли способ заставить цвета работать с 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}'
...