我将 macOS 10.15.2 与 iTerm2、zsh 5.7.1 和 oh-my-zsh(主题 robbyrussell)一起使用。
我注意到提示打印相对于 bash 来说有点慢。例如,如果我按下enter,光标最初会移动到下一行的开头,然后过了一会儿,shell 提示符进入并且光标移动到它的自然位置。例如,如果→ ~
是当我在我的主文件夹中时的提示,并且[]
是我的光标,当我按下回车键时,我看到:
0 - 空闲状态
→ ~ []
1 - 按下后立即enter
[]
2 - 返回空闲状态
→ ~ []
当我快速按回车键多次时,这种缓慢尤其明显。在这种情况下,我看到一些空白行。这就是我所看到的
→ ~
→ ~
→ ~
→ ~
→ ~
→ ~
→ ~
→ ~
→ ~ []
我来自 bash shell,当我使用 bash 时,并没有那么慢。我不确定这是 oh-my-zsh 或其自然行为的问题。我想了解更多有关此问题的信息,并最终了解如何解决它。谢谢。
PS:问题来自 oh-my-zsh,即使我禁用了所有插件,它仍然存在。
PPS:我之前在 SO 上发布了这个问题。感谢user1934428的帮助并建议我将这个问题移到这里。
我不知道默认情况下 oh-my-zsh 在提示中放置了什么。也许它会尝试识别版本控制状态,这是一个非常流行的提示组件,可能会很耗时。
要查看发生了什么,请使用 . 打开命令跟踪
set -x
。如果跟踪太长以至于滚动到屏幕外,请将其重定向到一个文件
这会将所有错误消息定向到文件,而不仅仅是跟踪。要在终端上恢复跟踪和错误,请运行
您可以通过自定义跟踪格式
PS4
。这是一个可以包含提示转义的格式字符串。例如,要添加精确的时间信息:我遇到了同样的问题,这也是
git_prompt_info
导致 shell 速度变慢的原因。请注意,一些 oh-my-zsh 主题在它们的提示中使用了“硬编码”的 git 插件。因此,请考虑使用此命令可以获得的列表中的一个
检查 git dir 是否脏似乎导致延迟。
要加快 shell 响应,请通过在终端中运行来禁用检查 dir 是否脏:
我在笔记本电脑中修复了这个问题,转到 ~/.oh-my-zsh 文件夹,然后运行
git pull
. 大约有 1200 个提交待处理。然后我关闭 iTerm 并再次打开它。您将收到 oh-my-zsh 正在更新的提示。vscode 开发容器终端提示对我来说很慢,完成任何命令后需要几秒钟才能返回提示。
set -x
显示问题git ls-files
在于用于更新大型回购提示中的分支/脏文本的命令。奇怪的是git ls-files
,它本身并不慢。设置
git config codespaces-theme.hide-status 1
解决了它。