Frage

Ich betreibe die folgenden Codes separat als meine Aufforderung erfolglos in .zshrc. Dies legt nahe, dass mir anscheinend habe ich nicht ein Programm namens __git_ps1. Es ist nicht in 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%}'

Wie können Sie eine Aufforderung erhalten, die den Namen eines Git-Zweig zeigt?

War es hilfreich?

Lösung

__git_ps1 ist von git-completion.bash. In zsh haben Sie wahrscheinlich Ihre eigene Funktion, um den aktuellen Verzeichnisse git Zweig zu bestimmen. Es gibt durchaus ein paar Blog-Posts über eine git prompt für zsh.

Sie brauchen nur:

  • eine Funktion, um die Zweignamen angeben
  • enable Aufforderung (Befehl) Substitution
  • Fügen Sie die Funktion auf Ihre prompte

Zum Beispiel

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

Update: Verwenden Sie die zsh vcs_info Modul statt 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)'

Andere Tipps

Hier ist eine erweiterte git Aufforderung für zsh. zsh-git-Prompt

alt text

ko-dos Antwort ist groß, aber ich ziehe es eine etwas git bewusst prompt als die, die er verwendet. Insbesondere, ich mag inszeniert, unstaged und untracked Datei-Benachrichtigungen in der Aufforderung selbst. Mit seiner Antwort und die zsh vcs_info Beispiele, Ich kam up mit dem folgenden:

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%# '

Dies erzeugt eine Eingabeaufforderung, die die kolorierte Ausgabe von git status -s nachahmt (die in Ihrer .gitconfig Datei konfiguriert werden kann). Ein Bild ist vielleicht am nützlichsten hier:

Eingabeaufforderung

Im Vergleich mit git status -s:

eingeben Bild Beschreibung hier

Wenn Sie nicht wie kolorierte Ausgabe, oder würden ein anderes Zeichen oder die schnelle Konstruktion bevorzugen, nur die stagedstr ändern, unstagedstr und hook_com[unstaged] Werte in dem obigen Code.

Viele dieser Lösungen für mich schien langsam, wenn die Return-Taste Maischen, also hier ist eine Option, die einfach und schnell ist:

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}%} $ '

Sie erhalten eine Aufforderung erhalten, die wie folgt aussieht: ~/dev/project (feature-branch) $

Danke für die Links!

Ich habe die folgende Aufforderung basierend auf sich

     # 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.)'        

Bitte machen Sie Verbesserungsvorschläge.

ich umgestrickt Mine gerade da wir langen Zweig Namen bei der Arbeit haben. Dieser wird mit einem Auslassungs gestutzt, wenn es mehr als 35 Zeichen ist.

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)$'

(Es ist mir peinlich, wie stolz ich auf diese bin.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top