所以我想摆脱 oh-my-zsh,因为它使我的 shell 启动明显滞后(>0.1s)。事实上,删除 oh-my-zsh 后,启动时间变为 0.02 秒,但现在我开始手动添加功能。首先,也是最重要的,不区分大小写的选项卡完成。因此我添加了类似的东西
autoload -U compinit compinit zstyle ':completion:*' matcher-list 'm:{[:lower:]}={[:upper:]}'
到我的 .zshrc。然而,仅这一小功能就使我的启动时间增加了近三倍,而语法突出显示或自动建议等其他功能似乎根本不影响启动时间。
在 bash 中,我可以简单地获得所需的不区分大小写的完成,
bind 'set completion-ignore-case on'
而不会降低任何性能(启动时间〜0.01s)。
我不知道 compinit 是做什么的,但是有没有办法在 zsh 中获得不区分大小写的完成而不显着减慢启动速度?
答案1
只需使用 Powerlevel10k 即可即时提示功能,您将能够将您喜欢的任何内容添加到 .zshrc 中,而不会减慢启动时间。
答案2
您可以在 .zlogin 而不是 .zshrc 上添加“compinit”引用,在我的例子中,加载时间缩短了很多。我还有一个测试,每天只重新编译一次compinit。
autoload -Uz zrecompile
autoload -Uz compinit
dump=$ZSH_COMPDUMP
# http://zsh.sourceforge.net/Doc/Release/Conditional-Expressions.html
if [[ -s $dump(#qN.mh+24) && (! -s "$dump.zwc" || "$dump" -nt "$dump.zwc") ]]; then
compinit -i d $ZSH_COMPDUMP
zrecompile $ZSH_COMPDUMP
fi
compinit -C
在我的 .zshenv 上,我有这个以避免加载全局配置:
unsetopt GLOBAL_RCS
skip_global_compinit=1
setopt noglobalrcs