J'ai récemment commencé à utiliser Zsh et c'est génial. Malheureusement, pour le projet que je considère comme mon projet "principal", tout est lent. Ce que je veux dire, c'est que chaque fois que j'exécute une commande ls
, par exemple, il y a un délai d'environ cinq secondes entre le moment où la commande est exécutée et le moment où je peux à nouveau utiliser le terminal.
Qu'est-ce qui pourrait être différent à propos de ce repo qui rend Zsh si lent? Je suppose que c'est une chose spécifique à Zsh car il n'y avait aucun problème avant de commencer à utiliser Zsh. J'ai essayé de faire un git clean
mais cela n'a fait aucune différence notable.
Je suis sous Mac OS X si cela compte.
Mise à jour: Il s'avère que cette ligne de mon .zshenv
est ce qui le ralentissait:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Si je commente cette ligne, cela passe d'environ 3 secondes à environ 1 seconde. Malheureusement, j'ai besoin de cette ligne, car beaucoup de mes projets utilisent RVM. Je ne sais pas quoi faire maintenant.
Mise à jour 2 : cela semble être spécifiquement une chose oh-my-zsh. Si je ne charge pas ~/.oh-my-zsh/oh-my-zsh.sh
, je n'ai pas de problème.
~/.z*
fichiers à l'écart?Réponses:
Vous pouvez l'ajouter à votre git config et zsh ne vérifiera plus l'état
Explication
Il y a deux fonctions git centrales dans lib / git.zsh :
git_prompt_info()
parse_git_dirty()
Chaque méthode a un commutateur git config pour la désactiver:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Certains thèmes créent leurs propres requêtes git et ignorent parfois ces indicateurs .
la source
oh-my-zsh.hide-dirty
. Cela pourrait avoir changé ou peut-être que mon thème (agnoster) ne respecte quehide-dirty
.--global
est vraiment pratique (lent en invité, rapide sur l'hôte) comme décrit ici: stackoverflow.com/a/40943155/1092815 <3git config --add oh-my-zsh.hide-dirty 1
était tout ce dont j'avais besoin pour mon repo lent.Oh_my_zsh semble être lent pour certains dépôts car il vérifie l'état du dépôt après chaque commande. Ce comportement peut être remplacé dans la nouvelle version de .oh_my_zsh. Décommentez simplement la ligne suivante dans .zshrc:
Après cela, redémarrez votre terminal ou exécutez ce qui suit:
la source
git config --add oh-my-zsh.hide-status 1
accélère les choses mais supprime complètement l'état zsh du VCS. Celui-ci le garde et l'accélère toujours.git config --add oh-my-zsh.hide-dirty 1
a fonctionné pour moi, cependant.git config --global --add oh-my-zsh.hide-dirty 1
pour désactiver cela pour tous les dépôts.DISABLE_UNTRACKED_FILES_DIRTY="true"
ne fait pas la même chose que leoh-my-zsh.hide-dirty
paramètre, même s'ils sont similaires. Voir le code ici: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . LeDISABLE_UNTRACKED_FILES_DIRTY
paramètre ajoute simplement un--untracked-files=no
indicateur à lagit status
commande, tandis que leoh-my-zsh.hide-dirty 1
paramètre ignore complètement lagit status
commande entière . Je recommande la suggestion de @ JohnathanElmore concernant le paramètre global git config.Pour moi, c'est lent sur VirtualBox (l'invité) car j'utilise un dossier synchronisé. Je veux toujours qu'il soit activé sur OS X (l'hôte) où il est assez rapide. Au lieu d'utiliser un paramètre de configuration local qui est stocké avec le repo et le changerait à la fois sur l'invité et l'hôte, j'utilise un paramètre de configuration global uniquement sur l'invité :
Si je le veux juste pour un seul repo:
la source
Cela pourrait être le thème appelant les trucs git et rvm après chaque commande.
Pour moi, changer
ZSH_THEME="juanghurtadoto"
pourZSH_THEME="miloshadzic"
supprimer le délai de 2 secondes après chaque commande complètement.Les thèmes peuvent être trouvés sur https://github.com/robbyrussell/oh-my-zsh/wiki/themes
la source
Il existe différentes façons d'accélérer
oh-my-zsh
, comme détaillé dans " zsh démarre incroyablement lentement ", en nettoyant la section plugin.Par exemple, le billet de blog « Correction de la lenteur de l'invite oh-my-zsh git-svn » mentionne la
parse_git_dirty
fonction comme un problème potentiel.la source
J'ai finalement compris. Mon projet avait un
rake
dossier avec une tonne de fichiers (comme 20 000). Je n'ai aucune idée de la raison pour laquelle ce dossier était là, mais je l'ai supprimé, Zsh n'est plus lent et mon application semble toujours fonctionner.la source
Si vous ne vous souciez pas d'un autre programme de contrôle de version
git
, vous pouvez simplement désactiver tous lesvcs_info
s de votre*.zsh-theme
et les remplacer par desgit
commandes natives .Par exemple, je peaufine mon
agnoster.zsh-theme
par:vcs_info
,éditer le code en
prompt_git()
fonction de:ref="$vcs_info_msg_0_"
àref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
Donc, fondamentalement, je viens de désactiver toutes les
vcs_info
actions et d'utiliser à la place unegit
commande native pour vérifier les statuts du dépôt. En conséquence, je peux toujours voir mon invite git utile avec une vitesse aussi rapide que de travailler dans un répertoire non git. Avec cette petite modification, mon zsh peut fonctionner 4 à 5 fois plus rapidement dans les dépôts git.Remarque: utilisez GNU grep et non BSD grep.
la source
Les réponses ci-dessus n'ont pas résolu mon problème. Dans mon cas, la fonction
git_prompt_status
prend trop de temps que les autres. J'ai donc modifié ~ / .oh-my-zsh / lib / git.zsh, en remplaçantgit_prompt_status
function par ma version de retour anticipé:Bien que j'utilise ZSH_THEME_GIT_PROMPT_MODIFIED comme une marque d'indéterminé, vous pouvez choisir n'importe quel statut que vous souhaitez pour l'indiquer ou implémenter une
git_prompt_status
fonction beaucoup plus rapide dans votre cas.la source
Pour toute personne utilisant le thème du vaisseau spatial, ajoutez ceci à
.zshrc
:travaillé pour moi. De toute évidence, vous perdrez le statut git dans l'invite de votre terminal.
Les options git pour ce thème peuvent être trouvées ici
la source