zsh 완성 정의를 찾는 방법

zsh 완성 정의를 찾는 방법

현재 로드된 zsh 완성 기능을 찾는 방법이 있습니까(완전 정의를 stdout으로 인쇄하기만 하면 됩니다)?

ag $fpath completionname나는 그것들이 내 fpath 어딘가에 저장되어 있다는 것을 알고 있으며 파일에서 정의를 찾는 것과 같은 작업을 수행할 수 있습니다 . 더 깔끔한 방법, zsh 기능 또는 이를 수행할 수 있는 기능이 있습니까?

답변1

이 명령의 완성 함수 이름 foo은 입니다 $_comps[foo].

함수의 코드를 보려면 를 myfunc실행 하거나 echo -E $functions[myfunc],echo $functions[myfunc]bsd_echo열기 옵션 또는 print -rl $functions[myfunc]. 따라서 명령 완성 기능에 대한 코드를 보려면 를 foo실행하세요 echo -E $functions[$_comps[foo]]. 또는 다음을 실행하십시오.which $_comps[foo]함수 이름에 별칭이 없는 경우.

이는 주석이 없는 코드를 보여줍니다(그리고 정규화된 공백이 있습니다. 이는 zsh에 의해 내부적으로 저장된 바이트코드의 사람이 읽을 수 있는 덤프입니다). 코드에 정의된 원본 파일을 보려면 다음을 실행하세요.whence -v $_comps[foo]또는 echo $functions_source[$_comps[foo]]. 이것functions_source배열은 다음 경우에만 사용할 수 있습니다.기준 치수zsh/parameter로드되며(를 사용하여 이 작업을 수행할 수 있음 zmodload zsh/parameter) zsh 5.4부터 시작합니다.

아직 함수를 사용하지 않았다면 builtin autoload -XU코드 대신 소스 경로 없이 이와 같은 내용이 표시됩니다. 소스 경로를 보려면 다음을 실행하세요.autoload -r $_comps[foo]먼저 zsh가 소스 경로를 확인하도록 한 다음 which또는 whence또는 를 사용하여 표시 할 수 있습니다 $functions_source.

zmodload zsh/parameter
(($+_comps[foo])) &&
autoload -r $_comps[foo] &&
((+$functions_source[$_comps[foo]])) &&
cat $functions_source[$_comps[foo]]

관련 정보