88 votes

Pour obtenir une invite indiquant Git-branch dans Zsh

J'exécute les codes suivants séparément en tant qu'invite sans succès dans .zshrc. Cela me suggère qu'apparemment, je n'ai pas de programme appelé __git_ps1. Ce n'est pas dans MacPorts.

#1

 PROMPT="$(__git_ps1 " \[\033[1;32m\] (%s)\[\033[0m\]")\$"$
 

# 2

 PROMPT="$(__git_ps1 " (%s)")\$"$
 

# 3

 # Get the name of the branch we are on
git_prompt_info() {
  branch_prompt=$(__git_ps1)
  if [ -n "$branch_prompt" ]; then
    status_icon=$(git_status)
    echo $branch_prompt $status_icon
  fi
}

# Show character if changes are pending
git_status() {
  if current_git_status=$(git status | grep 'added to commit' 2> /dev/null); then
    echo "☠"
  fi
}
autoload -U colors
colors
setopt prompt_subst
PROMPT='
%~%{$fg_bold[black]%}$(git_prompt_info)
→ %{$reset_color%}'
 

Comment pouvez-vous obtenir une invite indiquant le nom d'une branche Git?

85voto

ko-dos Points 762

__git_ps1 est à partir de git-achèvement.bash. En zsh vous avez probablement fournir votre propre fonction pour déterminer les répertoires actuels de la branche git. Il existe assez peu de messages de blog sur une invite git pour zsh.

Vous avez juste besoin de:

  • une fonction de fournir le nom de la branche
  • activer l'invite de commande (commande) la substitution
  • ajouter cette fonction à votre invite de

Par exemple

git_prompt() {
 ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
 echo $ref
}
setopt prompt_subst
PS1=$(git_prompt)%#
autoload -U promptinit
promptinit

Mise à jour: utilisation de l'zsh vcs_info module au lieu de git_prompt()

setopt prompt_subst
autoload -Uz vcs_info
zstyle ':vcs_info:*' actionformats \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
zstyle ':vcs_info:*' formats       \
    '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'

zstyle ':vcs_info:*' enable git cvs svn

# or use pre_cmd, see man zshcontrib
vcs_info_wrapper() {
  vcs_info
  if [ -n "$vcs_info_msg_0_" ]; then
    echo "%{$fg[grey]%}${vcs_info_msg_0_}%{$reset_color%}$del"
  fi
}
RPROMPT=$'$(vcs_info_wrapper)'

46voto

Olivier Verdier Points 12332

Voici une invite étendue de git pour zsh: zsh-git-prompt .

texte alternatif

40voto

Christopher Points 9715

ko-dos de réponse est excellent, mais je préfère un peu plus de git au courant prompte que celle qu'il utilise. Plus précisément, j'aime la mise en scène, unstaged, et sans traces de fichier les notifications dans l'invite de lui-même. À l'aide de sa réponse et la zsh vcs_info des exemples, je suis venu avec les éléments suivants:

setopt prompt_subst
autoload -Uz vcs_info
zstyle ':vcs_info:*' stagedstr 'M' 
zstyle ':vcs_info:*' unstagedstr 'M' 
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' actionformats '%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
zstyle ':vcs_info:*' formats \
  '%F{5}[%F{2}%b%F{5}] %F{2}%c%F{3}%u%f'
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
zstyle ':vcs_info:*' enable git 
+vi-git-untracked() {
  if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
  [[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then
  hook_com[unstaged]+='%F{1}??%f'
fi
}


precmd () { vcs_info }
PROMPT='%F{5}[%F{2}%n%F{5}] %F{3}%3~ ${vcs_info_msg_0_} %f%# '

Cela crée une invite qui imite le colorisée de sortie de l' git status -s (qui peut être configurée dans votre .gitconfig le fichier). Une image est peut-être plus utile ici:

prompt

En comparaison avec git status -s:

enter image description here

Si vous n'aimez pas colorisée de sortie, ou préférez un autre caractère ou la construction rapide, il suffit de changer l' stagedstr, unstagedstr, et hook_com[unstaged] valeurs dans le code ci-dessus.

0voto

Masi Points 22232

Merci pour les liens!

J'ai fait l'invite suivante basée sur eux

      # get the name of the branch we are on
     git_prompt_info() { 
         git branch | awk '/^\*/ { print $2 }'
     }
     get_git_dirty() { 
       git diff --quiet || echo '*'
     }

     autoload -U colors
     colors     
     setopt prompt_subst

     PROMPT='%{$fg[blue]%}%c %{$fg_bold[red]%}$(git_prompt_info)$(get_git_dirty)%{$fg[blue]%} $ %{$reset_color%}'                                           

     RPROMPT='%{$fg[green]%}%1(j.%j.)'
 

S'il vous plaît, suggérer des améliorations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X