oh-my-zsh 的提示很慢:如何解决这个问题

oh-my-zsh 的提示很慢:如何解决这个问题

我正在使用 macOS 10.15.2 和 iTerm2、zsh 5.7.1 和 oh-my-zsh(主题 robbyrussell)。

我注意到提示打印相对于 bash 来说稍微慢一些。例如,如果我按enter,光标最初会移到下一行的开头,然后过了一会儿,shell 提示符就会出现,光标会移动到其自然位置。例如,如果→ ~是我在主文件夹中时的提示,[]是我的光标,当我按 Enter 时,我会看到:

0 - 空闲状态

→ ~ []

1 - 按下后立即enter

[]

2 - 返回空闲状态

→ ~ []

当我多次快速按回车键时,这种缓慢现象尤其明显。在这种情况下,我看到一些空行。这就是我所看到的

→ ~
→ ~
→ ~

→ ~

→ ~


→ ~
→ ~
→ ~

→ ~ []

我来自 bash shell,当我使用 bash 时,并没有那么慢。我不确定这是 oh-my-zsh 或其自然行为的问题。我想了解更多有关此问题的信息,以及最终如何解决它。谢谢。

聚苯乙烯:问题来自 oh-my-zsh,即使我禁用所有插件,它仍然存在。

聚苯硫醚:我之前在 SO 上发布过这个问题。谢谢用户1934428感谢他的帮助并建议我把这个问题移到这里。

答案1

我不知道 oh-my-zsh 默认在提示中输入什么。也许它试图识别版本控制状态,这是一个非常流行的提示组件,可能很耗时。

要查看发生了什么,请使用以下命令打开命令跟踪set -x

→~
→~设置-x
跟踪为计算提示而执行的命令
→~
跟踪为计算提示而执行的命令
→~设置+x
+zsh:3> 设置 +x
→~
→~

如果跟踪太长以至于滚动到屏幕之外,请将其重定向到一个文件

exec 2>zsh.err

这会将所有错误消息定向到文件,而不仅仅是跟踪。要在终端上获取跟踪和错误,请运行

exec 2>/dev/tty

您可以通过自定义跟踪格式PS4。这是一个格式字符串,可以包含迅速逃脱。例如,要添加精确的计时信息:

PS4='%D{%s.%9.}+%N:%i> '

答案2

检查 git dir 是否脏似乎会导致延迟。

要加快 shell 响应速度,请通过在终端中运行来禁用检查 dir 是否脏:

git config --add oh-my-zsh.hide-dirty 1

请记住重新启动所有 shell。

答案3

我也遇到了同样的问题,这也是git_prompt_info导致 shell 速度变慢的原因。请注意,某些 oh-my-zsh 主题在其提示中使用了某种“硬编码”的 git 插件。

因此,请考虑使用此命令可以获得的列表中的一个

grep --files-without-match "git" ~/.oh-my-zsh/themes/*

答案4

我在笔记本电脑中修复了这个问题,转到 ~/.oh-my-zsh 文件夹,然后运行git pull​​.大约有 1200 个提交待处理。然后我关闭 iTerm 并再次打开它。您将收到 oh-my-zsh 正在更新的提示。

相关内容