Zsh: 함수에 바인딩된 키를 지연 로딩합니까?

Zsh: 함수에 바인딩된 키를 지연 로딩합니까?

새 셸을 시작할 때 로드되는 zsh 스크립트가 있는데 기본값은 zsh입니다.

func1() {
  <..check if in a git repo, if not return..>
  <..code here..>
}
zle -N func1
bindkey '\eo' func1

func1누르면 위의 기능이 실행됩니다 Alt-o. 이 함수는 git저장소에만 로드됩니다.

문제는 이 함수를 로드하는 데 드는 비용이 상당히 높다는 것입니다. 새 셸을 시작할 때 항상 로드되면 셸 프롬프트가 느려집니다. "게으른" 방법은 무엇입니까? 첫 번째 트리거에서만 로드합니까 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

관련 정보