2014-03-01 22 views
2

我試圖修改bart theme,因此它包含git狀態信息。我得到它的工作,但是當我改變目錄如何將git vcs_info添加到zsh中的prompt_bart_setup主題中?

我通過啓用vcs_info修改捷運主題時不更新:

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倉庫一個新的終端會話,但是當我改變目錄時不更新工作。

我見過的建議使用單引號,但是當我把它改成這樣:

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

的提示顯示字面上${vcs_info_msg_0_}。有任何想法嗎?

回答

1

promptsubst似乎有問題。當首先定義RPROMPT時,RPROMPT="${vcs_info_msg_0_}"將代替vcs_info_msg_0_的值。這就是爲什麼它在存儲庫中打開shell時會起作用的原因,但當您更改爲一個時不會。

單引號變體可以防止該初始替換,並且每次使用該提示時應該執行替換。但在你的情況下,它顯然不是。可能的話,你的zsh配置中有一個setopt nopromptsubst,它在prompt_bart_setup之後被調用。

如果確實設置,請參閱setopt | grep promptsubst

+0

我選中了,但沒有設置 – nachocab

+0

設置完成後,單引號的版本應該按照預期工作。 – Adaephon

+0

不,就像我在問題中寫的那樣,當我使用set promptsubst和'RPROMPT =「$ {vcs_info_msg_0 _}」時,出現正確的git提示符,但當我更改目錄時它不會更新 – nachocab

相關問題