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

flo*_*urr 9 prompt zsh terminal oh-my-zsh

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

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

0 - 空闲状态

? ~ []

1 - 按下后立即 enter

[]

2 - 回到空闲状态

? ~ []

当我多次快速按下 Enter 时,这种缓慢尤为明显。在这种情况下,我看到一些空行。这是我看到的

? ~
? ~
? ~

? ~

? ~


? ~
? ~
? ~

? ~ []
Run Code Online (Sandbox Code Playgroud)

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

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

PPS:我之前在 SO 上发布了这个问题。感谢user1934428的帮助并建议我将这个问题移到这里。

Sun*_*tel 19

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

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

git config --add oh-my-zsh.hide-dirty 1
Run Code Online (Sandbox Code Playgroud)

请记住重新启动所有 shell。


小智 17

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

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

grep --files-without-match "git" ~/.oh-my-zsh/themes/*
Run Code Online (Sandbox Code Playgroud)

  • 如果这是 git_prompt_info 问题,此命令将解决该问题: `git config oh-my-zsh.hide-info 1 --global` (4认同)

Gil*_*il' 10

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

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

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

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

exec 2>zsh.err

Run Code Online (Sandbox Code Playgroud)

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

exec 2>/dev/tty
Run Code Online (Sandbox Code Playgroud)

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

PS4='%D{%s.%9.}+%N:%i> '
Run Code Online (Sandbox Code Playgroud)


小智 8

~/.zshrc我通过修改并取消注释此环境变量解决了该问题:

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
DISABLE_UNTRACKED_FILES_DIRTY="true"
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助!