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)
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)
我希望它有帮助!