Недавно я начал использовать Zsh, и это здорово. К сожалению, для проекта, который я считаю своим «основным», все идет медленно. Я имею в виду, что каждый раз, когда я запускаю команду ls
, например, между моментом выполнения команды и моментом, когда я снова могу использовать терминал, возникает задержка в пять секунд.
Что может отличаться от этого репо, которое делает Zsh таким медленным? Я предполагаю, что это специфическая вещь для Zsh, потому что до того, как я начал использовать Zsh, проблем не было. Я попробовал сделать, git clean
но это не дало заметной разницы.
Я использую Mac OS X, если это важно.
Обновление:.zshenv
оказывается, именно эта моя строка замедляла работу:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Если я прокомментирую эту строку, это займет от примерно 3 секунд до примерно 1 секунды. К сожалению, мне нужна эта строка, поскольку многие мои проекты используют RVM. Я не знаю, что мне теперь делать.
Обновление 2 : похоже, это особенная вещь о-о-о-о. Если я не загружаюсь ~/.oh-my-zsh/oh-my-zsh.sh
, у меня нет проблем.
~/.z*
файлы в сторону, все равно будет медленно ?Ответы:
Вы можете добавить это в свою конфигурацию git, и zsh больше не будет проверять статус
Объяснение
В lib / git.zsh есть две центральные функции git :
git_prompt_info()
parse_git_dirty()
У каждого метода есть переключатель конфигурации git, чтобы отключить его:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Некоторые темы создают свои собственные запросы git и иногда игнорируют эти флаги .
источник
oh-my-zsh.hide-dirty
. Возможно, это изменилось, а может моя тема (агностер) только уважаетhide-dirty
.--global
действительно удобно (медленно в гостевой, быстро на хосте), как описано здесь: stackoverflow.com/a/40943155/1092815 <3git config --add oh-my-zsh.hide-dirty 1
было всем, что мне было нужно для моего медленного репо.Oh_my_zsh кажется медленным для некоторых репозиториев, потому что он проверяет статус репо после каждой команды. Это поведение можно изменить в новой версии .oh_my_zsh. Просто раскомментируйте следующую строку в .zshrc:
После этого перезапустите терминал или запустите следующее:
источник
git config --add oh-my-zsh.hide-status 1
ускоряет работу, но полностью удаляет zsh-статус VCS. Этот сохраняет его и все еще ускоряет.git config --add oh-my-zsh.hide-dirty 1
хотя работал на меня.git config --global --add oh-my-zsh.hide-dirty 1
чтобы отключить это для всех репозиториев.DISABLE_UNTRACKED_FILES_DIRTY="true"
не делает то же самое, что иoh-my-zsh.hide-dirty
настройка, хотя они похожи. Смотрите код здесь: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . ПараметрDISABLE_UNTRACKED_FILES_DIRTY
просто добавляет--untracked-files=no
кgit status
команде флаг , тогда какoh-my-zsh.hide-dirty 1
параметр полностью пропускает всюgit status
команду. Я рекомендую предложение @ JohnathanElmore о глобальной настройке git config.Для меня это медленно на VirtualBox (гость), потому что я использую синхронизированную папку. Я все еще хочу, чтобы он был включен в OS X (хост), где он достаточно быстр. Вместо использования локальной настройки конфигурации, которая хранится в репозитории и изменяет ее как на гостевой, так и на хост-системе, я использую глобальную настройку конфигурации только для гостя :
Если я хочу это только для одного репо:
источник
Это может быть тема, вызывающая git и rvm после каждой команды.
Для меня изменение
ZSH_THEME="juanghurtadoto"
на полностьюZSH_THEME="miloshadzic"
удалило 2-секундную задержку после каждой команды.Темы можно найти на https://github.com/robbyrussell/oh-my-zsh/wiki/themes
источник
Есть несколько способов ускорить загрузку
oh-my-zsh
, как подробно описано в разделе « zsh запускается невероятно медленно », очистив раздел плагинов.Например, в сообщении в блоге « Исправление медленной работы подсказок oh-my-zsh git-svn » эта
parse_git_dirty
функция упоминается как потенциальная проблема.источник
Я наконец-то понял. В моем проекте была
rake
папка с множеством файлов (например, 20 000). Я понятия не имею, для чего там была эта папка, но я удалил ее, Zsh больше не работает медленно, а мое приложение все еще работает.источник
Если вас не интересуют другие программы управления версиями
git
, вы можете просто отключить всеvcs_info
s в своем*.zsh-theme
и заменить их собственнымиgit
командами.Например, я настраиваю
agnoster.zsh-theme
:vcs_info
,редактировать код в
prompt_git()
функции из:ref="$vcs_info_msg_0_"
кref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
По сути, я просто отключил все
vcs_info
действия и вместо этого использую собственнуюgit
команду для проверки статусов репо. В результате я все еще могу видеть свое полезное приглашение git со скоростью, сравнимой с работой в каталоге, отличном от git. С этой небольшой модификацией мой zsh может работать в 4-5 раз быстрее в репозиториях git.Примечание: используйте GNU grep, а не BSD grep.
источник
Ответы выше не решили мою проблему. В моем случае функция
git_prompt_status
занимает слишком много времени, чем другие. Поэтому я изменил ~ / .oh-my-zsh / lib / git.zsh, заменивgit_prompt_status
функцию моей ранней версией возврата:Хотя я использую ZSH_THEME_GIT_PROMPT_MODIFIED как знак неопределенности, вы можете выбрать любой статус, чтобы указать это, или реализовать гораздо более быструю
git_prompt_status
функцию в вашем случае.источник
Для тех, кто использует тему космического корабля, добавьте это в
.zshrc
:работал у меня. Очевидно, вы потеряете статус git в командной строке терминала.
Параметры git для этой темы можно найти здесь
источник