我最近安装了 zsh 并花了一些时间对其进行了正确的配置,以下是尝试过的方法的快速概述:
setopt prompt_subst 使用 prompt_subst 这样我们就可以简单地使用 vcs_info 变量,它们会在运行时更新。
它可以工作,具有颜色,并且它不会破坏任何试图修改 PS1 的东西。但是我似乎无法弄清楚启用它有什么缺点?
峰值功率 使用 psvar 替代命令行,可以工作,但会弄乱颜色。
在每个 precmd 中更新 PS1 运行良好,但任何试图修改 PS1 的操作都会失败,因为它会被重置。可以通过黑客修复,但在我看来它太丑陋/脆弱了,所以跳过这个。
--
总结一下:
- 启用 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}'
...