Recientemente comencé a usar Zsh y es increíble. Desafortunadamente, para el proyecto que considero mi proyecto "principal", todo es lento. Lo que quiero decir es que cada vez que ejecuto un comando ls, por ejemplo, hay un retraso de cinco segundos entre el momento en que se ejecuta el comando y el momento en que puedo usar el terminal nuevamente.
¿Qué podría ser diferente en este repositorio que hace que Zsh sea tan lento? Supongo que es algo específico de Zsh porque no había ningún problema antes de empezar a usar Zsh. Intenté hacer una git cleanpero no hizo ninguna diferencia notable.
Estoy en Mac OS X si eso importa.
Actualización: resulta que esta línea de mi .zshenves lo que lo estaba haciendo lento:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Si comento esa línea, pasa de tardar unos 3 segundos a tardar alrededor de 1 segundo. Desafortunadamente, necesito esa línea, ya que muchos de mis proyectos usan RVM. No sé qué hacer ahora.
Actualización 2 : esto parece ser específicamente una cosa oh-my-zsh. Si no cargo ~/.oh-my-zsh/oh-my-zsh.sh, no tengo ningún problema.

~/.z*archivos del camino?Respuestas:
Puede agregar esto a su configuración de git y zsh ya no verificará el estado
Explicación
Hay dos funciones centrales de git en lib / git.zsh :
git_prompt_info()parse_git_dirty()Cada método tiene un conmutador de configuración git para deshabilitarlo:
oh-my-zsh.hide-statusoh-my-zsh.hide-dirtyAlgunos temas crean sus propias consultas de git y, a veces, ignoran estos indicadores .
fuente
oh-my-zsh.hide-dirty. Puede que haya cambiado o quizás mi tema (agnoster) solo respetehide-dirty.--globales realmente útil (lento en invitado, rápido en host) como se describe aquí: stackoverflow.com/a/40943155/1092815 <3git config --add oh-my-zsh.hide-dirty 1era todo lo que necesitaba para mi repositorio lento.Oh_my_zsh parece ser lento para algunos repositorios porque verifica el estado del repositorio después de cada comando. Este comportamiento se puede anular en la nueva versión de .oh_my_zsh. Simplemente elimine el comentario de la siguiente línea en .zshrc:
Después de esto, reinicie su terminal o ejecute lo siguiente:
fuente
git config --add oh-my-zsh.hide-status 1acelera las cosas, pero elimina por completo el estado zsh del VCS. Este lo mantiene y aún lo acelera.git config --add oh-my-zsh.hide-dirty 1aunque funcionó para mí.git config --global --add oh-my-zsh.hide-dirty 1para deshabilitar esto para todos los repositorios.DISABLE_UNTRACKED_FILES_DIRTY="true"no hace lo mismo que eloh-my-zsh.hide-dirtyescenario, aunque son similares. Vea el código aquí: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . LaDISABLE_UNTRACKED_FILES_DIRTYconfiguración simplemente agrega una--untracked-files=nobandera algit statuscomando, mientras que laoh-my-zsh.hide-dirty 1configuración omitirá todo elgit statuscomando por completo. Recomiendo la sugerencia de @ JohnathanElmore de la configuración de configuración global de git.Para mí, es lento en VirtualBox (el invitado) porque estoy usando una carpeta sincronizada. Todavía lo quiero habilitado en OS X (el host) donde es lo suficientemente rápido. En lugar de usar una configuración de configuración local que se almacena con el repositorio y la cambiaría tanto en el invitado como en el host, utilizo una configuración de configuración global solo en el invitado :
Si lo quiero solo para un solo repositorio:
fuente
Podría ser el tema que llama git y rvm después de cada comando.
Para mí, cambiar
ZSH_THEME="juanghurtadoto"aZSH_THEME="miloshadzic"eliminó el retraso de 2 segundos después de cada comando por completo.Los temas se pueden encontrar en https://github.com/robbyrussell/oh-my-zsh/wiki/themes
fuente
Hay varias formas de acelerar y
oh-my-zsh, como se detalla en " zsh comienza increíblemente lento ", limpiando la sección de complementos.Por ejemplo, la publicación del blog " Solución para la lentitud del indicador de oh-my-zsh git-svn " menciona la
parse_git_dirtyfunción como un problema potencial.fuente
Finalmente lo resolví. Mi proyecto tenía una
rakecarpeta con una tonelada de archivos (como 20.000). No tengo idea de para qué estaba esa carpeta, pero la eliminé, Zsh ya no es lento y mi aplicación todavía parece funcionar.fuente
Si no le importan otros programas de control de versiones
git, puede deshabilitar todos los correosvcs_infoelectrónicos en su*.zsh-themey reemplazarlos congitcomandos nativos .Por ejemplo, modifico mi
agnoster.zsh-themepor:vcs_info,editar código en
prompt_git()función desde:ref="$vcs_info_msg_0_"aref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"Entonces, básicamente, desactivé todas las
vcs_infoacciones y en su lugar utilicé ungitcomando nativo para verificar los estados del repositorio. Como resultado, todavía puedo ver mi útil indicador de git con una velocidad tan rápida como trabajar en un directorio que no sea de git. Con esta pequeña modificación, mi zsh puede funcionar 4-5 veces más rápido dentro de repositorios de git.Nota: use GNU grep no BSD grep.
fuente
Las respuestas anteriores no resolvieron mi problema. En mi caso, la función
git_prompt_statuslleva demasiado tiempo que otras. Así que modifiqué ~ / .oh-my-zsh / lib / git.zsh, reemplazando lagit_prompt_statusfunción con mi versión de retorno temprana:Si bien uso ZSH_THEME_GIT_PROMPT_MODIFIED como una marca de indeterminado, puede elegir cualquier estado que desee para indicarlo o implementar una
git_prompt_statusfunción mucho más rápida en su caso.fuente
Para cualquiera que use el tema de la nave espacial , agregue esto a
.zshrc:trabajó para mi. Obviamente, perderá el estado de git en el indicador de su terminal.
Las opciones de git para este tema se pueden encontrar aquí
fuente