Instalei recentemente o zsh e aproveitei para configurá-lo corretamente, visão geral rápida dos métodos testados:
setopt prompt_subst Use o prompt_subst para que possamos simplesmente usar as variáveis vcs_info e elas serão atualizadas durante o tempo de execução.
Funciona com cores e não deve quebrar nada tentando modificar o PS1. no entanto, não consigo descobrir quais são as desvantagens de tê-lo ativado?
psvar Use um psvar para substituir a linha de comando, funciona, mas bagunça cores.
atualiza PS1 a cada precmd Funciona bem, mas qualquer coisa que tente modificar o PS1 falha ao ser redefinida. Poderia ser corrigido com hacks, mas é IMO muito feio / frágil, então pule este aqui.
-
Então, para resumir:
Se o prompt_subst tiver desvantagens significativas, então 2 seria a melhor alternativa, se possível, 3 é um pouco frágil, então não use isso.
A parte relevante do meu .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}'
...