oh-my-zsh lent, mais seulement pour certaines repo Git
J'ai récemment commencé à utiliser Zsh et c'est génial. Malheureusement, pour le projet que je considère comme mes "principal" du projet, tout est très lent. Ce que je veux dire, c'est que chaque fois que je lance une commande ls
, par exemple - il y a environ cinq secondes de retard entre le moment où la commande est exécutée et le temps que je peux utiliser le terminal de nouveau.
Ce qui pourrait être différent de celui des pensions de qui fait Zsh-elle si lente? Je suppose que c'est un Zsh-chose car il n'y avait pas de problème avant de commencer à utiliser Zsh. J'ai essayé de faire un git clean
mais il n'a fait aucune différence notable.
Je suis sur Mac OS X, si ce qui compte.
Mise à jour: s'avère que cette ligne de mon .zshenv
est ce qui était de le rendre lent:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Si je commente cette ligne, cela va de la prise environ 3 secondes pour prendre environ 1 seconde. Malheureusement, j'ai besoin de cette ligne, car la plupart de mes projets utiliser RVM. Je ne sais pas quoi faire maintenant.
Mise à jour 2: cela semble être spécifiquement un oh-my-zsh chose. Si je ne charge pas ~/.oh-my-zsh/oh-my-zsh.sh
, je n'ai pas le problème.
- et si vous utilisez bash maintenant, est-il lent?
- Excellente question. Non, c'est rapide sur le coup.
- Est-il encore lent, si vous déplacez votre
~/.z*
fichiers de la route? - Pas de. Donc je suppose que c'est quelque chose dans un de ces.
- Bon, le coupable semble être
~/.oh-my-zsh/oh-my-zsh.sh
. Je ne sais pas quoi faire avec cette information, bien que. - Il réduit encore plus loin et mise à jour de ma réponse.
- Aussi, quand j'inclus
oh-my-zsh.sh
dans mon.zshrc
, pour une raison quelconque, les charges de.zshenv
deux fois, ce qui charge RVM deux fois, ce qui doit certainement rendre les choses plus lentement que nécessaire. - Si l'opération est grand, appelant git st, à chaque fois, pourrait ralentir la coquille vers le bas. Utilisez cette option pour le désactiver. git config --add oh-my-zsh.cacher-statut 1
- Pour info cela se produit également sur WSL sur Windows avec Oh My Zsh.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter ceci à votre git config et zsh de ne pas vérifier le statut plus
Explication
Il y a deux centrales de git fonctions dans lib/git.zsh:
git_prompt_info()
parse_git_dirty()
Chaque Méthode a un git config commutateur pour le désactiver:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Certains thèmes de créer leur propre git requêtes et parfois ignorer ces drapeaux.
oh-my-zsh.hide-dirty
. Il a peut-être changé ou peut-être mon thème (agnoster) respectehide-dirty
.oh-my-zsh
, sinon votrelib/git.zsh
peut complètement ignorer lahide-dirty
option.--global
est vraiment à portée de main (lent en guest, rapide sur l'hôte) comme décrit ici: stackoverflow.com/a/40943155/1092815 <3git status
est certainement la lenteur de la questionOh_my_zsh semble être lent pour certaines repos, car il vérifie l'état de l'opération après chaque commande.
Ce comportement peut être remplacé dans la nouvelle version de .oh_my_zsh .
Juste Décommentez la ligne suivante dans .zshrc:
Après cela, redémarrez votre terminal ou exécutez la commande suivante:
git config --add oh-my-zsh.hide-status 1
accélère les choses, mais il les supprime complètement la zsh statut de la VCS. Cette on la garde et encore des vitesses de jusqu'à.Il existe différents moyens pour accélérer un
oh-my-zsh
, comme détaillé dans "zsh commence incroyablement lentement", le nettoyage de la section plugin.Par exemple, le billet de blog"Correctif pour les oh-my-zsh git-svn invite lenteur", mentionne le
parse_git_dirty
fonctionner comme un problème potentiel.Il pourrait être le thème de l'appel de git et du rvm trucs après chaque commande.
Pour moi, l'évolution
ZSH_THEME="juanghurtadoto"
àZSH_THEME="miloshadzic"
enlevé les 2 secondes après chaque commande complètement.Thèmes peuvent être trouvés à https://github.com/robbyrussell/oh-my-zsh/wiki/themes
Pour moi, c'est lent sur VirtualBox (l'invité) parce que je suis à l'aide d'un dossier synchronisé. J'en veux encore activé sur OS X (l'hôte), où il est assez rapide. Au lieu d'utiliser un local paramètre de configuration qui est stocké avec le repo et allait changer à la fois sur l'invité et l'hôte, j'utilise un global configuration paramètre uniquement sur l'invité:
Si je le veux juste pour un seul repo:
J'ai enfin compris. Mon projet a eu un
rake
dossier avec une tonne de fichiers (comme 20 000). Je n'ai aucune idée de ce que le dossier était là, mais je l'ai supprimé, Zsh est plus lent, et mon application semble fonctionner.Si vous n'avez pas de soins sur une autre version des programmes de contrôle, mais
git
, vous pouvez simplement désactiver tous lesvcs_info
s dans votre*.zsh-theme
et les remplacer par des indigènesgit
commandes.Par exemple, j'ai modifier mon
agnoster.zsh-theme
par:vcs_info
,modifier le code dans
prompt_git()
fonction de:ref="$vcs_info_msg_0_"
àref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
Donc, en gros, j'ai juste désactivé tous les
vcs_info
actions, et au lieu d'utiliser un natifgit
de commande pour vérifier les statuts de l'opération. En conséquence, je ne peux toujours voir mon git utile invite à une vitesse aussi rapide que de travailler dans un non-répertoire git. Avec cette petite modification, mon zsh peut travailler 4-5x plus rapide dans git repos.Remarque: l'utilisation de GNU grep pas BSD grep.
Les réponses ci-dessus n'a pas résolu mon problème. Dans mon cas, la fonction
git_prompt_status
prend trop de temps que d'autres. J'ai donc modifié ~/.oh-my-zsh/lib/git.zsh, en remplacement degit_prompt_status
fonction avec le début de mon retour version:Alors que j'utilise ZSH_THEME_GIT_PROMPT_MODIFIED comme une marque de l'indéterminé, vous pouvez choisir n'importe quel état vous comme pour indiquer que ou de mettre en œuvre beaucoup plus rapidement
git_prompt_status
fonction dans votre cas.