pyenv
やrbenv
のようなoh-my-zshプラグインは素晴らしいですが、シェルの起動時間が遅くなる可能性があるため、プラグインを使用しないように強制されることがよくあります。 #6017のような問題が発生するのはそのためです。
一部のプラグインを非同期でロードできるので、すべてのプラグインが起動するまでシェルプロンプトがブロックされませんか? これに失敗した場合、プラグインをオンデマンドでロードできますか?
非同期ロードに関する部分には答えられませんが、手動ロードの場合は、それを行う関数を.zshrcに追加できます。
基本的な例(1つのプラグインのみを処理でき、エラーチェックはありません)
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その情報をありがとう。
上記のようなエイリアスを自動的に定義するために使用できる別のシェル変数lazy_plugins
を使用できるかどうか、またはおそらくzsh autoload
を使用してプラグインを実際にロードするコストが発生するかどうか、疑問に思います。ユーザーがシェルの起動時ではなく、プラグインを使用しようとしたとき。
スクリプトの専門家がこのアイデアについてどう思うか聞いてみたいです。
最も参考になるコメント
非同期ロードに関する部分には答えられませんが、手動ロードの場合は、それを行う関数を.zshrcに追加できます。
基本的な例(1つのプラグインのみを処理でき、エラーチェックはありません)
次に、必要なときにいつでも
load-plugin pyenv
を実行します。