현재 로드된 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]]