配置.zshrc在prompt展示git分支时显示滞后如何解决
问题根因
- 你把
vcs_info相关的zstyle配置写在了vcs_info调用之后,这些配置对本次vcs_info执行不生效,只会作用于下一次调用,所以分支信息会滞后一个操作 - 额外手动调用
git rev-parse获取分支没有必要,vcs_info本身已经包含分支信息,重复配置zstyle也会增加不必要的执行开销
修复方案
把所有zstyle配置提前到precmd函数外部定义,直接使用vcs_info内置的分支变量,不需要额外调用git命令:
# Prompt 配置 # 加载prompt颜色支持 autoload -U colors && colors # 加载版本控制信息模块 autoload -Uz vcs_info # 提前配置所有vcs_info规则,不要放在precmd里重复执行 zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:git:*' unstagedstr "!" zstyle ':vcs_info:git:*' stagedstr "+" # %b为vcs_info内置的分支名占位符,直接拼接在格式规则里 zstyle ':vcs_info:git:*' formats '%F{magenta}%7>>%b%<<%f%K{green}%u%k%K{cyan}%c%k' precmd() { # 每次prompt渲染前更新版本控制信息 vcs_info if [[ -n ${vcs_info_msg_0_} ]]; then # 处于git仓库时直接使用拼接好的vcs_info内容 PS1='${vcs_info_msg_0_} %~; ' else # 非git仓库显示普通prompt PS1='%~; ' fi }
验证说明
修改完成后执行source ~/.zshrc生效,再测试进出git目录,分支信息就会实时同步,不会再出现滞后问题。
内容的提问来源于stack exchange,提问作者thor
相关产品推荐
相关产品推荐

