تعد مكونات oh-my-zsh الإضافية مثل pyenv
أو rbenv
رائعة ، لكن في كثير من الأحيان أجبر على عدم استخدام مكون إضافي لأنه يمكن أن يجلب وقت إطلاق shell الخاص بي إلى الزحف. هذا هو سبب حصولنا على مشكلات مثل # 6017.
هل من الممكن تحميل بعض المكونات الإضافية بشكل غير متزامن ، لذلك لا يتم حظر موجه shell الخاص بي حتى يتم تشغيل جميع المكونات الإضافية؟ إذا تعذر ذلك ، هل يمكنني تحميل المكونات الإضافية عند الطلب؟
لا يمكنني الإجابة على الجزء المتعلق بالتحميل غير المتزامن ، ولكن للتحميل اليدوي ، يمكنك إضافة وظيفة إلى .zshrc تقوم بذلك.
مثال أساسي (قادر فقط على التعامل مع مكون إضافي واحد ، بدون التحقق من الأخطاء)
function load-plugin() {
source $ZSH/plugins/"$1"/"$1".plugin.zsh
}
ثم قم بتشغيل load-plugin pyenv
متى احتجت إليها.
أردت فقط أن تتناغم مع وجود مشكلة مشابهة جدًا تحدث مع NVM (مدير إصدارات Node.js) الآن: https://github.com/creationix/nvm/issues/1277.
ابتكرcrenwick طريقة رائعة لتحميل NVM عند الطلب:
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'
آمل أن يتم فعل نفس الشيء مع pyenv:
alias load_pyenv='eval "$(pyenv init -)"'
alias pyenv='unalias pyenv && load_pyenv && pyenv'
awinecki شكرا على تلك المعلومات.
يجعلني أتساءل عما إذا كان بإمكاننا الحصول على متغير shell آخر lazy_plugins
والذي يمكن استخدامه إما لتعريف الأسماء المستعارة تلقائيًا مثل ما ورد أعلاه ، أو ربما استخدام zsh autoload
لذلك يتم تكبد تكلفة تحميل المكون الإضافي فعليًا عندما يحاول المستخدم استخدام البرنامج المساعد ، بدلاً من وقت بدء تشغيل shell.
أحب أن أسمع رأي خبراء البرمجة النصية حول هذه الفكرة.
التعليق الأكثر فائدة
لا يمكنني الإجابة على الجزء المتعلق بالتحميل غير المتزامن ، ولكن للتحميل اليدوي ، يمكنك إضافة وظيفة إلى .zshrc تقوم بذلك.
مثال أساسي (قادر فقط على التعامل مع مكون إضافي واحد ، بدون التحقق من الأخطاء)
ثم قم بتشغيل
load-plugin pyenv
متى احتجت إليها.