Plugins oh-my-zsh como pyenv
ou rbenv
são ótimos, mas muitas vezes sou forçado a não usar um plugin porque ele pode reduzir o tempo de inicialização do shell. É por isso que temos problemas como #6017 .
É possível carregar alguns plugins de forma assíncrona, para que meu prompt de shell não seja bloqueado até que todos os plugins sejam iniciados? Se isso falhar, posso carregar plugins sob demanda?
Não posso responder a parte sobre carregamento assíncrono, mas para carregamento manual, você pode adicionar uma função ao seu .zshrc que faça isso.
Um exemplo básico (só é capaz de lidar com um plugin, sem verificação de erros)
function load-plugin() {
source $ZSH/plugins/"$1"/"$1".plugin.zsh
}
Então execute load-plugin pyenv
, sempre que precisar.
Só queria avisar que há um problema muito semelhante acontecendo com o NVM (gerenciador de versão do Node.js) agora: https://github.com/creationix/nvm/issues/1277.
@crenwick surgiu com uma ótima maneira de carregar o NVM sob demanda:
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'
Espero que o mesmo possa ser feito com pyenv:
alias load_pyenv='eval "$(pyenv init -)"'
alias pyenv='unalias pyenv && load_pyenv && pyenv'
@awinecki obrigado por essa informação.
Isso me faz pensar se podemos ter outra variável de shell lazy_plugins
que pode ser usada para definir automaticamente aliases como o acima, ou talvez usar zsh autoload
para que o custo de realmente carregar o plugin seja incorrido quando o usuário tenta usar o plug-in, em vez de no momento da inicialização do shell.
Adoraria ouvir o que os especialistas em scripts pensam sobre essa ideia.
Comentários muito úteis
Não posso responder a parte sobre carregamento assíncrono, mas para carregamento manual, você pode adicionar uma função ao seu .zshrc que faça isso.
Um exemplo básico (só é capaz de lidar com um plugin, sem verificação de erros)
Então execute
load-plugin pyenv
, sempre que precisar.