You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在zsh的双引号提示符中使用vcs_info功能?

解决zsh中双引号提示符下vcs_info不生效的问题

我来帮你捋清楚这个问题的根源,以及怎么快速修复它!

问题核心原因

zsh对单引号和双引号的变量展开规则完全不同:

  • 单引号定义prompt时,变量会被延迟到每次显示提示符的瞬间才展开——这时候precmd已经执行完毕,vcs_info_msg_0_已经被正确赋值为版本控制信息,所以能正常显示分支内容。
  • 而用双引号时,变量会在你执行prompt="..."这行命令的那一刻就直接展开了!这时候precmd还没运行过,vcs_info_msg_0_是空值,之后不管vcs_info怎么更新,提示符里的这个位置都只会是空的。

两种修复方案

选任意一种都能解决问题:

方案1:转义双引号里的变量

给变量前的$加反斜杠,让zsh延迟解析这个变量:

autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git svn
zstyle ':vcs_info:git*' formats "- (%b) "
precmd() { vcs_info }
setopt prompt_subst
prompt="%2/ \${vcs_info_msg_0_}> "  # 给$添加反斜杠转义,实现延迟展开

方案2:继续使用单引号定义prompt

既然单引号本身就支持延迟变量展开,直接用回你原本能正常工作的单引号写法就行:

autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git svn
zstyle ':vcs_info:git*' formats "- (%b) "
precmd() { vcs_info }
setopt prompt_subst
prompt='%2/ ${vcs_info_msg_0_}> '  # 单引号版本,天然支持实时获取变量值

验证方法

修改完配置后,执行source ~/.zshrc让配置生效,然后进入一个git仓库目录,看看提示符是不是自动显示出- (分支名) >的格式了。

内容的提问来源于stack exchange,提问作者jak bin

火山引擎 最新活动