Les plugins oh-my-zsh comme pyenv
ou rbenv
sont géniaux, mais je suis souvent obligé de ne pas utiliser de plugin car cela peut ralentir le temps de lancement de mon shell. C'est pourquoi nous avons des problèmes comme #6017 .
Est-il possible de charger certains plugins de manière asynchrone, afin que mon invite de shell ne soit pas bloquée tant que tous les plugins ne sont pas lancés ? A défaut, puis-je charger des plugins à la demande ?
Je ne peux pas répondre à la partie sur le chargement asynchrone, mais pour le chargement manuel, vous pouvez ajouter une fonction à votre .zshrc qui le fait.
Un exemple de base (capable de gérer un seul plugin, pas de vérification d'erreur)
function load-plugin() {
source $ZSH/plugins/"$1"/"$1".plugin.zsh
}
Ensuite, exécutez load-plugin pyenv
, chaque fois que vous en avez besoin.
Je voulais juste dire qu'il y a un problème très similaire avec NVM (gestionnaire de versions Node.js) en ce moment : https://github.com/creationix/nvm/issues/1277.
@crenwick a trouvé un excellent moyen de charger NVM à la demande :
alias load_nvm='export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"'
alias node='unalias node npm && load_nvm && node'
alias npm='unalias node npm && load_nvm && npm'
J'espère que la même chose pourrait être faite avec pyenv:
alias load_pyenv='eval "$(pyenv init -)"'
alias pyenv='unalias pyenv && load_pyenv && pyenv'
@awinecki merci pour cette info.
Cela me fait me demander si nous pouvons avoir une autre variable shell lazy_plugins
qui peut être utilisée pour définir automatiquement des alias comme ci-dessus, ou peut-être utiliser zsh autoload
afin que le coût de chargement du plugin soit encouru lorsque l'utilisateur tente d'utiliser le plug-in, plutôt qu'au démarrage du shell.
J'aimerais entendre ce que les experts en script pensent de cette idée.
Commentaire le plus utile
Je ne peux pas répondre à la partie sur le chargement asynchrone, mais pour le chargement manuel, vous pouvez ajouter une fonction à votre .zshrc qui le fait.
Un exemple de base (capable de gérer un seul plugin, pas de vérification d'erreur)
Ensuite, exécutez
load-plugin pyenv
, chaque fois que vous en avez besoin.