vcs_info,zsh 中的配置正确吗?

vcs_info,zsh 中的配置正确吗?

我最近安装了 zsh 并花了一些时间对其进行了正确的配置,以下是尝试过的方法的快速概述:

setopt prompt_subst 使用 prompt_subst 这样我们就可以简单地使用 vcs_info 变量,它们会在运行时更新。

它可以工作,具有颜色,并且它不会破坏任何试图修改 PS1 的东西。但是我似乎无法弄清楚启用它有什么缺点?

峰值功率 使用 psvar 替代命令行,可以工作,但会弄乱颜色。

在每个 precmd 中更新 PS1 运行良好,但任何试图修改 PS1 的操作都会失败,因为它会被重置。可以通过黑客修复,但在我看来它太丑陋/脆弱了,所以跳过这个。

--

总结一下:

  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}'

...

相关内容