![Zsh: 함수에 바인딩된 키를 지연 로딩합니까?](https://linux55.com/image/147171/Zsh%3A%20%ED%95%A8%EC%88%98%EC%97%90%20%EB%B0%94%EC%9D%B8%EB%94%A9%EB%90%9C%20%ED%82%A4%EB%A5%BC%20%EC%A7%80%EC%97%B0%20%EB%A1%9C%EB%94%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
새 셸을 시작할 때 로드되는 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