Question

Je lance les codes suivants séparément comme mon invite, sans succès, dans .zshrc. Cela me donne à penser que, apparemment, je n'ai pas un programme appelé __git_ps1. Il n'est pas 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 qui indique le nom d'une branche Git?

Était-ce utile?

La solution

__git_ps1 est de git-completion.bash. En zsh vous avez probablement fournir votre propre fonction pour déterminer la branche git actuelle des répertoires. Il y a quelques sur un prompt git pour zsh.

Vous avez juste besoin:

  • fonction de fournir le nom de la branche
  • permettre un remplacement rapide (commande)
  • ajouter la fonction à l'invite

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: utiliser 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)'

Autres conseils

Voici une invite git prolongée pour zsh:. zsh-git-rapide

text alt

La réponse de ko-dos est grand, mais je préfère une invite au courant git un peu plus que celui qu'il utilise. Plus précisément, j'aime mis en scène, unstaged et notifications de fichiers non suivis dans l'invite lui-même. En utilisant sa réponse et la zsh vcs_info exemples, je suis 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 la sortie colorisée de git status -s (qui peut être configuré dans votre fichier .gitconfig). Une photo est ici peut-être le plus utile:

prompt

Par rapport à git status -s:

entrer image description ici

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

Beaucoup de ces solutions a semblé lent pour moi écraser la clé de retour, voici donc une option qui est simple et rapide:

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

setopt PROMPT_SUBST
PROMPT='%9c%{%F{green}%}$(parse_git_branch)%{%F{none}%} $ '

Vous obtiendrez une invite qui ressemble à ceci: ~/dev/project (feature-branch) $

Merci pour les liens!

Je fis l'invite suivante basée sur les

     # 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, toute suggestion d'amélioration.

Je viens à moi depuis que nous avons refait de longues noms de succursales au travail. Celui-ci va tronquer des points de suspension si elle est plus de 35 caractères.

parse_git_branch() {
    git_status="$(git status 2> /dev/null)"
    pattern="On branch ([^[:space:]]*)"
    if [[ ! ${git_status} =~ "(working (tree|directory) clean)" ]]; then
        state="*"
    fi
    if [[ ${git_status} =~ ${pattern} ]]; then
      branch=${match[1]}
      branch_cut=${branch:0:35}
      if (( ${#branch} > ${#branch_cut} )); then
          echo "(${branch_cut}…${state})"
      else
          echo "(${branch}${state})"
      fi
    fi
}

setopt PROMPT_SUBST
PROMPT='%{%F{blue}%}%9c%{%F{none}%}$(parse_git_branch)$'

(je suis gêné à quel point je suis fier de cela.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top