동일한 툴킷의 여러 명령에 대해 zsh 완료 기능을 작성 중입니다.
명령은 서로 다른 파일에 서로 다른 완성을 작성하고 싶을 정도로 다릅니다. (즉, 의 완성은 헤더가 있는 파일에 있고 do_thingA
, 의 완성은 헤더가 있는 파일에 있습니다.)_do_thingA
#compdef do_thingA
do_thingB
_do_thingB
#compdef do_thingB
이러한 명령은 서로 다르지만 모두 공통 매개변수를 갖습니다. 따라서 명령 간의 모든 차이점으로 인해 어떤 시점에서는 모든 _do_thing
파일에 다음과 같은 내용이 포함됩니다.
...
_arguments \
...
'-c[common option]:common option:_helper_function' \
...
_helper_function
모든 파일 _do_thing
에 동일한 것을 정의하는 것을 피하고 싶습니다 . 가장 중요한 것은 사용자가 자신만의 것을 제공할 수 있도록 하고 싶습니다(더 나은 개인화 _helper_function
).
이를 달성하는 가장 좋은 방법은 무엇입니까?
고려해야 할 사항:
가드 정의
나는 _helper_function
이미 정의된 내용을 덮어쓰는 것을 방지할 수 있다는 것을 이미 알고 있습니다.
(( $+functions[_helper_function] )) ||
_helper_function() {
...
}
_do_thing
모든 파일에 넣을 수 있습니다 . 하지만 저는 이것을 _helper_function
별도의 파일로 아웃소싱하는 것을 선호합니다 _helper_function
.
함수 본문을 별도의 파일에 넣습니다.
파일을 생성하고 _helper_function
어딘가에 배치하면 fpath
해당 내용은 함수의 함수 본문이 됩니다 _helper_function
. 이 경우 헤더 주위에 정의 가드를 배치하는 방법을 모르겠습니다 _helper_function()
(더 이상 직접 작성하지 않기 때문에).
답변1
한 가지 방법은 먼저 _helper_function
어딘가에 배치 fpath
한 다음 다른 위치에 배치하는 것입니다..zshrc
autoload -U _helper_function
그런 다음 사용자가 이를 사용자 정의하려는 경우 해당 버전이 귀하의 버전보다 먼저 발견되도록 새 _helper_function
파일을 넣습니다. 예를 들어 다음과 같습니다 .fpath
firstfuncdir
% cd
% mkdir firstfuncdir
% fpath=(~/firstfuncdir $fpath)
% print -l $fpath
/Users/jhqdoe/firstfuncdir
/Users/jhqdoe/.zsh/functions/darwin
/Users/jhqdoe/.zsh/functions
/usr/local/share/zsh/site-functions
/opt/local/share/zsh/site-functions
/opt/local/share/zsh/5.5.1/functions
%