Zsh:延迟加载绑定键到函数?

Zsh:延迟加载绑定键到函数?

我有一个 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

相关内容