Ich führe die folgenden Codes separat als meine Eingabeaufforderung in .zshrc erfolglos aus. Dies deutet darauf hin, dass ich anscheinend kein Programm namens __git_ps1 habe. 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 kann man eine Eingabeaufforderung erhalten, die den Namen eines Git-Zweigs anzeigt?
Antworten:
__git_ps1
ist von git-vervollständigung.bash. In zsh müssen Sie wahrscheinlich Ihre eigene Funktion bereitstellen, um den aktuellen Verzeichnis-Git-Zweig zu bestimmen. Es gibt einige Blog-Beiträge über eine Git-Eingabeaufforderung für zsh.Du brauchst nur:
Zum Beispiel
Update: Verwenden Sie das Modul zsh vcs_info anstelle von git_prompt ()
quelle
cut -d'/' -f3-
stattdessen.%F{n}
Aktiviert die ANSI-Farben
für den Vordergrund und%f
deaktiviert die Vordergrundfarbe. Dasformats
Format%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}]%f
wird beispielsweise,(%s)-[%b]
wenn Sie die Farben ignorieren. Das%s
wird durch das VC-System (zB Git) ersetzt und das%b
wird durch den aktuellen Zweig ersetzt.(sv[nk]|bzr)
Unter - Pattern auf denbranchformat
engt es zusvn
,svk
undbzr
. Dies bedeutet, dass diese Systemebranch:revision
anstelle der Standardeinstellung verwendet werden solltenbranch
. Wegen derenable
Zeilebzr
wird nicht unterstützt, daher ist diesebzr
Einschränkung "toter Code". Die ersten drei Zeilen werden wörtlich aus den ZSH-Dokumenten kopiert , aber die letzte Zeile wurde von jemand anderem hinzugefügt, was wahrscheinlich den toten Code erklärt.actionformats
wird(%s)-[%b|%a]
Farben ignorieren. Dieses Format wird bei speziellen Aktionen verwendet, wobei%a
die Aktion beschrieben wird. Dies ist meiner Meinung nach die nützlichste Funktion: zB für git wird angezeigt, wann Sie sich mitten in einer Rebase befinden (was ich beim Versuch, Zusammenführungskonflikte zu lösen, oft vergesse).Hier ist eine erweiterte Git-Eingabeaufforderung für zsh: zsh-git-prompt .
quelle
Die Antwort von ko-dos ist großartig, aber ich bevorzuge eine etwas git-bewusstere Eingabeaufforderung als die, die er verwendet. Insbesondere mag ich Benachrichtigungen über bereitgestellte, nicht bereitgestellte und nicht verfolgte Dateien in der Eingabeaufforderung. Anhand seiner Antwort und der zsh vcs_info-Beispiele habe ich Folgendes gefunden:
Dadurch wird eine Eingabeaufforderung erstellt, die die kolorierte Ausgabe von
git status -s
(die in Ihrer.gitconfig
Datei konfiguriert werden kann) nachahmt . Ein Bild ist hier vielleicht am hilfreichsten:Verglichen mit
git status -s
:Wenn Sie nicht wie kolorierte Ausgabe, oder würde ein anderes Zeichen oder die schnelle Konstruktion bevorzugen, ändern Sie einfach die
stagedstr
,unstagedstr
undhook_com[unstaged]
Werte in dem obigen Code.quelle
vcs_info
. Eines ist jedoch:git status
ist langsam . Ich habegit ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' '
stattdessen verwendet, und es ist viel schneller.--directory
Flagge ist möglicherweise nicht erforderlich. Ich fand es ärgerlich, weil Git normalerweise leere Verzeichnisse ignoriert.??
und in der Eingabeaufforderung angezeigt wurden). Behoben durch Hinzufügen eines--no-empty-directory
Flags zumgit ls-files
Befehl.Viele dieser Lösungen schienen mir beim Drücken der Eingabetaste langsam zu sein. Hier ist eine Option, die einfach und schnell ist:
Sie erhalten eine Eingabeaufforderung, die folgendermaßen aussieht:
~/dev/project (feature-branch) $
quelle
git symbolic-ref --short HEAD 2> /dev/null
Sie erhalten eine Antwort, die weniger Analyse erfordert.Ich habe gerade meine überarbeitet, da wir lange Filialnamen bei der Arbeit haben. Dieser wird mit einem Auslassungszeichen abgeschnitten, wenn er mehr als 35 Zeichen umfasst.
(Es ist mir peinlich, wie stolz ich darauf bin.)
quelle
Danke für die Links!
Ich habe die folgende Eingabeaufforderung basierend auf ihnen gemacht
Bitte schlagen Sie Verbesserungen vor.
quelle
git symbolic-ref --short HEAD
, wodurch das Geschäft "refs / Heads /" für Sie entfernt wird.Für alle, die an einer vorgefertigten Lösung interessiert sind, installieren Sie https://github.com/ohmyzsh/ohmyzsh - standardmäßig ist ein Git-Plugin aktiviert. Ich habe nach so etwas gesucht - einfache, vorgefertigte Konfiguration, funktioniert gut.
quelle
Wenn alle Ihre Eingabeaufforderungen gut aussehen, aber nicht funktionieren, z.
Das PROMPT muss auf eine Zeichenfolge gesetzt werden, die in einfache Anführungszeichen anstatt in doppelte Anführungszeichen gesetzt wird.
quelle