我正在使用 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 正在更新的提示。