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

xel*_*xel 6 performance 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 中获得不区分大小写的完成?

Ser*_*ujo 0

您可以在 .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
Run Code Online (Sandbox Code Playgroud)

在我的 .zshenv 上,我有这个以避免加载全局配置:

unsetopt GLOBAL_RCS
skip_global_compinit=1
setopt noglobalrcs
Run Code Online (Sandbox Code Playgroud)