zsh 不区分大小写的选项卡补全,不会显着增加启动时间

zsh 不区分大小写的选项卡补全,不会显着增加启动时间

所以我想摆脱 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

相关内容