我有一个 zsh 脚本,在启动新 shell 时加载,默认为 zsh。
func1() {
<..check if in a git repo, if not return..>
<..code here..>
}
zle -N func1
bindkey '\eo' func1
func1
按 时会触发上述功能Alt-o
。该函数仅在git
存储库中加载。
问题是,加载这个函数的成本相当高,如果启动新 shell 时总是加载,那么 shell 提示会变慢,如何“惰性”-仅在第一次触发时加载Alt-o
?
答案1
autoload
是延迟加载函数直到使用它们的机制;在$fpath
目录中创建一个testfunc
文件:
% < testfunc
testfunc() {
sleep 3
print this is a test function
}
然后autoload
是(如果需要的话,然后是zle ...
):
% grep testfunc ~/.zshrc
autoload -U testfunc
在使用之前它不应该在内存中:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function