O zsh começa incrivelmente devagar

63

O ZSH leva cerca de um segundo e meio entre a criação de uma nova janela do terminal e a preparação. Tenho certeza de que o culpado é compinit.

Não consegui encontrar boa documentação, compinit,mas parece que ele deveria estar armazenando em cache todas as coisas necessárias em algum arquivo como .zcompdump.

Algum truque para acelerar?

Eli
fonte

Respostas:

33

oh-my-zshestava demorando cerca de 1,5 segundos para iniciar no meu laptop. Eu escrevi algumas das etapas que tomei para reduzir isso para cerca de 0,25 segundos .

Outra alma gentil resumiu os passos necessários para integrar minhas mudanças na sua cópia do oh-my-zsh.

O maior problema é que compinitestava sendo chamado várias vezes extras, em vez de apenas uma vez depois que o fpath foi completamente definido. Fiz essas alterações no meu ramo oh-my-zshno github. As mudanças foram discutidas no github e parecem estar funcionando bem para algumas pessoas. Esperamos que as mudanças sejam mescladas oh-my-zshno futuro próximo.

Pat Regan
fonte
4
Para futuros leitores, acredito que todas essas mudanças foram mescladas a montante.
Michael Mior
11
As alterações podem ter sido movidas para montante, mas a remoção do Git dos plugins me ajudou substancialmente.
kylehotchkiss
25

Embora o ZSH tenha seu próprio quinhão de lentidões, se você encontrar a janela do terminal em branco por alguns instantes antes de ver a Last Login:linha, precisará limpar seus arquivos de log para ver melhorias na velocidade. Esse ainda é um problema no OSX Lion e precisará ser feito a cada vários meses. Coxo, eu sei.

O comando é:

sudo rm -rf /private/var/log/asl/*.asl

Obviamente, você precisa ler este artigo com antecedência e saber exatamente o que está acontecendo, porque a execução de tudo o que diz sudo rmprecisa ser pensada. Só coloquei isso aqui porque o uso do ZSH prova sua competência com a linha de comando para iniciar.

kylehotchkiss
fonte
11
Obrigado, uma solução tão simples para algo que me atormenta há tanto tempo!
27413 Dean
7
Eu recomendaria não usar, -rjá que nenhum diretório está envolvido e não é necessário. Omitir leva a menos lágrimas se alguém digitar sudo rm -rf / private/var/log/asl*.asl(espaço antes do privado) por engano.
27413 Dean Dean
11
Ou ainda mais infalível, cd /private/var/log/aslentão rm -f *.asl. Também para o registro, essa resposta me salvou de um tempo de inicialização que se aproximava de 10 segundos, muito obrigado!
Garrett Disco
11
Trabalhou para mim! Entre trash /private/var/log/asl*.asl. trashprecisará ser instalado, é claro. brew install trash
Mike D
12

Minha maior melhoria veio da remoção de itens da seção plugin = (). Os plugins 'github' e 'brew' são muito lentos para carregar.

Também removi o hub ao qual eu havia aliasado gite que acelerou o prompt também.

Eu tenho usado '/ usr / bin / time zsh -i -c exit' para registrar os horários de inicialização, no entanto compinit, não parece fazer uma diferença suficientemente grande para mim.

Seria ótimo ouvir o que os outros estão fazendo para acelerar isso.

xer0x
fonte
11
A remoção dos plugins githube brewresolveu meu problema imediatamente.
Pedro Niederwieser
gite brewplugins são essenciais para mim. Ao remover o rubyplugin resolveu meu problema. Obrigado.
Ivan ZG Xiao
6

Você está usando o pré-instalado /bin/zshou outro? Eu pergunto, porque o zsh que instalei através do fink começa muito devagar devido à inclusão de modelos zsh , enquanto a baunilha é iniciada.

A execução com um dumpfile explícito ( compinit -d dumpfile) torna mais rápido? A página do manual afirma que

A próxima chamada do compinit lerá o arquivo despejado em vez de executar uma inicialização completa.

Joey1978
fonte
2
Estou usando Oh My Zsh (que acredito usar o padrão / bin / zsh). Quando desativo o carregamento de todos os plugins do Oh My Zsh e outros enfeites, ele carrega muito rapidamente, mas acho que nesse caso compinitnunca é chamado. Quando ligo manualmente compinit, demora um pouco. Talvez seja apenas porque Oh My Zsh adiciona tantas ligações ao compinit?
Eli
5

Agora, oh-my-zsh verifica a opção de configuração especial do git oh-my-zsh.hide-status antes de consultar o status. Então corra

git config oh-my-zsh.hide-status 1

no repositório problemático.

Artem Tikhomirov
fonte
para mim eu tive que desativar o plugin git no .zshrc. Atualmente, estou enfrentando problemas com resposta lenta à Internet, o que fez zsh lento
Paschalis
5

O Zsh por si só inicia em cerca de 0,1 segundo para mim, o que é bastante bom. Acabei de perceber quando cheguei perto da marca do histórico de 50.000 comandos que se tornou mais de 3 segundos para carregar o primeiro prompt.

Não sei como vocês estão encontrando todos esses outros motivos para uma inicialização lenta, mas o meu foi exatamente o que foi meu primeiro palpite. Eu fiz um mv ~/.zsh_history zsh_history_backupe bam, inicialização de 3 segundos agora é inicialização de 0,1 segundo. Curiosamente, /usr/bin/time /bin/zsh -i -c exitfalha em capturar o tempo necessário para carregar na história.

Se você não possui dezenas de milhares de comandos no seu histórico do zsh, então não é isso. Meu ~/.zsh_historymedido 1.8MB. É muito possível colar acidentalmente uma grande quantidade de coisas como um comando em um terminal, isso também irá inchar a história rapidamente (embora isso seja algo muito a ser evitado, pois obviamente pode ser extremamente destrutivo).

Steven Lu
fonte
Essa é a resposta. Se você não fez nada sofisticado (muitos plugins e complementos) com o oh-my-zsh, garanto que é por causa do log do histórico. A mudança é imediata.
Sebastialonso
2

Eu estava usando o tema "af-magic"

Mudar para "musa" resolveu o problema.

Edite ~ / .zshrc e modifique essa linha:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"
mika
fonte
obrigado pela resposta, achei que a mudança de af-magic para outra coisa resolveu o problema. Curiosamente, restaurar a af-magic ainda funciona muito bem. não sei o que aconteceu por baixo do capô.
sarat
0

Eu tenho ótimas melhorias de velocidade depois de limpar o diretório ~ / .oh-my-zsh / plugins /. Havia muitos plugins não utilizados dentro dele.

pinguinjkeke
fonte
0

Adicione o seguinte ao seu ~ / .zshenv

skip_global_compinit=1
FacePalm
fonte