Ohmyzsh: プラグイン:非同期またはオンデマンドでロードできますか?

作成日 2017年09月06日  ·  3コメント  ·  ソース: ohmyzsh/ohmyzsh

pyenvrbenvのようなoh-my-zshプラグインは素晴らしいですが、シェルの起動時間が遅くなる可能性があるため、プラグインを使用しないように強制されることがよくあります。 #6017のような問題が発生するのはそのためです。

一部のプラグインを非同期でロードできるので、すべてのプラグインが起動するまでシェルプロンプトがブロックされませんか? これに失敗した場合、プラグインをオンデマンドでロードできますか?

init Feature

最も参考になるコメント

非同期ロードに関する部分には答えられませんが、手動ロードの場合は、それを行う関数を.zshrcに追加できます。

基本的な例(1つのプラグインのみを処理でき、エラーチェックはありません)

function load-plugin() {
  source $ZSH/plugins/"$1"/"$1".plugin.zsh
}

次に、必要なときにいつでもload-plugin pyenvを実行します。

全てのコメント3件

非同期ロードに関する部分には答えられませんが、手動ロードの場合は、それを行う関数を.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を使用してプラグインを実際にロードするコストが発生するかどうか、疑問に思います。ユーザーがシェルの起動時ではなく、プラグインを使用しようとしたとき。

スクリプトの専門家がこのアイデアについてどう思うか聞いてみたいです。

このページは役に立ちましたか?
0 / 5 - 0 評価