Ich habe vor kurzem angefangen, Zsh zu benutzen und es ist großartig. Leider ist für das Projekt, das ich als mein "Hauptprojekt" betrachte, alles langsam. Was ich meine ist, dass jedes Mal, wenn ich einen Befehl ausführe -ls
zum Beispiel - zwischen der Ausführung des Befehls und der Zeit, zu der ich das Terminal wieder verwenden kann, eine Verzögerung von etwa fünf Sekunden liegt.
Was könnte anders an diesem einen Repo sein, das Zsh so langsam macht? Ich nehme an, es ist eine Zsh-spezifische Sache, da es kein Problem gab, bevor ich anfing, Zsh zu verwenden. Ich habe versucht, einegit clean
aber es machte keinen merklichen Unterschied.
Ich bin unter Mac OS X, wenn das wichtig ist.
Update: Es stellt sich heraus, dass diese Zeile meine .zshenv
langsam gemacht hat:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Wenn ich diese Zeile kommentiere, dauert es ungefähr 3 Sekunden bis ungefähr 1 Sekunde. Leider brauche ich diese Leitung, da viele meiner Projekte RVM verwenden. Ich weiß jetzt nicht, was ich tun soll.
Update 2 : Dies scheint speziell eine Oh-My-Zsh-Sache zu sein. Wenn ich nicht lade ~/.oh-my-zsh/oh-my-zsh.sh
, habe ich kein Problem.
~/.z*
Dateien aus dem Weg räumen?Antworten:
Sie können dies zu Ihrer Git-Konfiguration hinzufügen und zsh überprüft den Status nicht mehr
Erläuterung
In lib / git.zsh gibt es zwei zentrale Git-Funktionen :
git_prompt_info()
parse_git_dirty()
Jede Methode verfügt über einen Git-Konfigurationsschalter, um sie zu deaktivieren:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Einige Themen erstellen ihre eigenen Git-Abfragen und ignorieren diese Flags manchmal .
quelle
oh-my-zsh.hide-dirty
. Es könnte sich geändert haben oder vielleicht respektiert mein Thema (Agnoster) nurhide-dirty
.--global
ist sehr praktisch (langsam im Gast, schnell auf dem Host), wie hier beschrieben: stackoverflow.com/a/40943155/1092815 <3git config --add oh-my-zsh.hide-dirty 1
war alles was ich für mein langsames Repo brauchte.Oh_my_zsh scheint für einige Repos langsam zu sein, da es den Status des Repos nach jedem Befehl überprüft. Dieses Verhalten kann in der neuen Version von .oh_my_zsh überschrieben werden. Kommentieren Sie einfach die folgende Zeile in .zshrc aus:
Starten Sie danach Ihr Terminal neu oder führen Sie Folgendes aus:
quelle
git config --add oh-my-zsh.hide-status 1
beschleunigt die Dinge, entfernt aber den zsh-Status des VCS vollständig. Dieser behält es und beschleunigt es immer noch.git config --add oh-my-zsh.hide-dirty 1
hat aber für mich gearbeitet.git config --global --add oh-my-zsh.hide-dirty 1
um dies für alle Repos zu deaktivieren.DISABLE_UNTRACKED_FILES_DIRTY="true"
macht nicht dasselbe wie dieoh-my-zsh.hide-dirty
Einstellung, obwohl sie ähnlich sind. Den Code finden Sie hier: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . DieDISABLE_UNTRACKED_FILES_DIRTY
Einstellung fügt--untracked-files=no
demgit status
Befehl einfach ein Flag hinzu , während dieoh-my-zsh.hide-dirty 1
Einstellung den gesamtengit status
Befehl insgesamt überspringt . Ich empfehle @ JohnathanElmores Vorschlag für die globale Git-Konfigurationseinstellung.Für mich ist es auf VirtualBox (dem Gast) langsam, weil ich einen synchronisierten Ordner verwende. Ich möchte immer noch, dass es unter OS X (dem Host) aktiviert wird, wo es schnell genug ist. Anstatt eine lokale Konfigurationseinstellung zu verwenden, die im Repo gespeichert ist und diese sowohl auf dem Gast als auch auf dem Host ändern würde, verwende ich eine globale Konfigurationseinstellung nur für den Gast :
Wenn ich es nur für ein einziges Repo will:
quelle
Es könnte das Thema sein, das nach jedem Befehl Git- und RVM-Zeug aufruft.
Für mich wechseln
ZSH_THEME="juanghurtadoto"
zuZSH_THEME="miloshadzic"
die Verzögerung von 2 Sekunden nach jedem Befehl vollständig entfernt.Themen finden Sie unter https://github.com/robbyrussell/oh-my-zsh/wiki/themes
quelle
Es gibt verschiedene Möglichkeiten, eine zu beschleunigen
oh-my-zsh
, wie in " zsh beginnt beginnt unglaublich langsam , um den Plugin-Bereich zu " beschrieben.Zum Beispiel erwähnt der Blog-Beitrag " Fix für die Langsamkeit der Eingabeaufforderung von oh-my-zsh git-svn " die
parse_git_dirty
Funktion als potenzielles Problem.quelle
Ich habe es endlich herausgefunden. Mein Projekt hatte einen
rake
Ordner mit einer Menge Dateien (wie 20.000). Ich habe keine Ahnung, wofür dieser Ordner da war, aber ich habe ihn gelöscht, Zsh ist nicht mehr langsam und meine App scheint immer noch zu funktionieren.quelle
Wenn Sie sich nicht für andere Versionskontrollprogramme interessieren
git
, können Sie einfach allevcs_info
s in Ihrem Programm deaktivieren*.zsh-theme
und durch nativegit
Befehle ersetzen .Zum Beispiel optimiere ich meine
agnoster.zsh-theme
durch:vcs_info
,Code in
prompt_git()
Funktion bearbeiten von:ref="$vcs_info_msg_0_"
zuref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
Im Grunde habe ich einfach alle
vcs_info
Aktionen deaktiviert und stattdessen einen nativengit
Befehl zum Überprüfen des Status des Repos verwendet. Infolgedessen kann ich meine nützliche Git-Eingabeaufforderung immer noch mit einer Geschwindigkeit sehen, die so schnell ist wie die Arbeit in einem Nicht-Git-Verzeichnis. Mit dieser kleinen Modifikation kann mein zsh in Git-Repos 4-5x schneller arbeiten.Hinweis: Verwenden Sie GNU grep und nicht BSD grep.
quelle
Die obigen Antworten haben mein Problem nicht gelöst. In meinem Fall nimmt die Funktion
git_prompt_status
zu viel Zeit in Anspruch als andere. Also habe ich ~ / .oh-my-zsh / lib / git.zsh geändert und diegit_prompt_status
Funktion durch meine frühe Rückkehrversion ersetzt:Während ich ZSH_THEME_GIT_PROMPT_MODIFIED als Zeichen für Unbestimmtes verwende, können Sie einen beliebigen Status auswählen, um dies anzuzeigen, oder
git_prompt_status
in Ihrem Fall eine viel schnellere Funktion implementieren .quelle
Für alle, die das Raumschiff- Thema verwenden, fügen Sie Folgendes hinzu
.zshrc
:arbeitete für mich. Offensichtlich verlieren Sie den Git-Status in Ihrer Terminal-Eingabeaufforderung.
Die Git-Optionen für dieses Thema finden Sie hier
quelle