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 clean
pero no hizo ninguna diferencia notable.
Estoy en Mac OS X si eso importa.
Actualización: resulta que esta línea de mi .zshenv
es 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-status
oh-my-zsh.hide-dirty
Algunos 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
.--global
es 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 1
era 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 1
acelera 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 1
aunque funcionó para mí.git config --global --add oh-my-zsh.hide-dirty 1
para deshabilitar esto para todos los repositorios.DISABLE_UNTRACKED_FILES_DIRTY="true"
no hace lo mismo que eloh-my-zsh.hide-dirty
escenario, aunque son similares. Vea el código aquí: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . LaDISABLE_UNTRACKED_FILES_DIRTY
configuración simplemente agrega una--untracked-files=no
bandera algit status
comando, mientras que laoh-my-zsh.hide-dirty 1
configuración omitirá todo elgit status
comando 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_dirty
función como un problema potencial.fuente
Finalmente lo resolví. Mi proyecto tenía una
rake
carpeta 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_info
electrónicos en su*.zsh-theme
y reemplazarlos congit
comandos nativos .Por ejemplo, modifico mi
agnoster.zsh-theme
por: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_info
acciones y en su lugar utilicé ungit
comando 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_status
lleva demasiado tiempo que otras. Así que modifiqué ~ / .oh-my-zsh / lib / git.zsh, reemplazando lagit_prompt_status
funció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_status
funció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