Я хочу иметь два разных формата для отображения 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