Как применить условный fomat к vcs_info с zsh - PullRequest
1 голос
/ 20 января 2020

Я хочу иметь два разных формата для отображения vcs_info в моем приглашении zsh на основе переменной vcs_info hook_com [staged]

Вот важная часть моего .zshr c

plugins=(git)
autoload -Uz vcs_info

tag=""
zstyle ':vcs_info:git:*' check-for-staged-changes true
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked

+vi-git-untracked(){
    if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
        git status --porcelain | grep ' M ' &> /dev/null ; then
        hook_com[staged]+='M'
        tag="OK"
    else
        tag=""
    fi
}
precmd() {
  vcs_info
    if [[ -n ${tag} ]] ; then
      zstyle ':vcs_info:git:*' formats "[%s@%b(%c%m)]"
    else
      zstyle ':vcs_info:git:*' formats "[%s@%b]"
    fi
}

Ожидаемый результат - информация vcs (для git) выглядит следующим образом:

  • [git@master] // Нет измененных файлов
  • [git@master (M)] // Модифицированные файлы

, которые прекрасно работают, если я только что не внес изменение:

[20/01-10:31]<zmx@bgtian:~/misc[git@master]>% echo "aa" >> README.md
[20/01-10:32]<zmx@bgtian:~/misc[git@master]>% cd . // on this line I should have seen the change.
[20/01-10:32]<zmx@bgtian:~/misc[git@master(M)]>%

Я что-то пропустил с помощью precmd или хуков на vcs_info

Ответы [ 2 ]

0 голосов
/ 20 января 2020

В моем приглашении была указана двойная кавычка, а не одна. Пока не знаю почему, но это решило мою проблему.

0 голосов
/ 20 января 2020

Я не эксперт, но вы пытаетесь поставить vcs_info после ваших условий, как это:

precmd() {
    if [[ -n ${tag} ]] ; then
      zstyle ':vcs_info:git:*' formats "[%s@%b(%c%m)]"
    else
      zstyle ':vcs_info:git:*' formats "[%s@%b]"
    fi
 vcs_info
}
...