【问题标题】:How to add git vcs_info to the prompt_bart_setup theme in zsh?zsh 中如何将 git vcs_info 添加到 prompt_bart_setup 主题?
【发布时间】:2014-03-01 13:17:28
【问题描述】:

我正在尝试修改bart theme,使其包含 git 状态信息。我让它工作了,但是当我更改目录时它不会更新

我通过启用 vcs_info 修改了 bart 主题:

prompt_bart_setup () {
    # ...
    autoload -Uz vcs_info
    # Set vcs_info parameters.
    zstyle ':vcs_info:*' enable bzr git hg svn
    zstyle ':vcs_info:*' check-for-changes true
    zstyle ':vcs_info:*' stagedstr '%F{green}●%f'
    zstyle ':vcs_info:*' unstagedstr '%F{yellow}●%f'
    zstyle ':vcs_info:*' formats ' - [%b%c%u]'
    zstyle ':vcs_info:*' actionformats " - [%b%c%u|%F{cyan}%a%f]"
    zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b|%F{cyan}%r%f'
    zstyle ':vcs_info:git*+set-message:*' hooks git-status
    # ...
}

prompt_bart_precmd () {
    # ...
    vcs_info
    # ...
}

并填充 RPROMT 变量(它也适用于 PS1,但我想隔离问题):

prompt_bart_ps1 () {
    # ...
    RPROMPT="${vcs_info_msg_0_}"
    # ...
}

如果我在 git repo 中创建一个新的终端会话,这会起作用,但是当我更改目录时它不会更新。

我看到了使用单引号的建议,但是当我将其更改为:

prompt_bart_ps1 () {
    # ...
    setopt promptsubst
    RPROMPT='${vcs_info_msg_0_}'
    # ...
}

提示字面意思是${vcs_info_msg_0_}。有什么想法吗?

【问题讨论】:

    标签: git zsh prompt


    【解决方案1】:

    promptsubst 似乎有问题。 RPROMPT="${vcs_info_msg_0_}" 将在首次定义 RPROMPT 时替换 vcs_info_msg_0_ 的值。这就是为什么当您在存储库中打开一个 shell 时它可以工作,但当您更改为一个时它不起作用的原因。

    单引号变体阻止了这种初始替换,然后setopt promptsubst 应该在每次使用提示时进行替换。但在你的情况下,显然不是。可能在您的 zsh 配置中某处有一个 setopt nopromptsubst,它在 prompt_bart_setup 中的那个之后被调用。

    看看setopt | grep promptsubst是否真的设置好了。

    【讨论】:

    • 我检查了,但没有设置
    • 设置后,单引号版本应按预期工作。
    • 不,就像我在问题中写的那样,当我使用 set promptsubst 和 RPROMPT="${vcs_info_msg_0_}" 时,会出现正确的 git 提示,但是当我更改目录时它不会更新
    • 是的,这是因为在首次定义提示时会评估双引号变体。虽然每次打印提示时都会评估单引号变体,但启用 if promptsubst
    • 你可以通过在你的shell中运行RPROMPT='${vcs_info_msg_0_}' ; setopt promptsubst来测试它。它应该会产生预期的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多