%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%ED%83%AD%20%EC%99%84%EC%84%B1%20%EB%8F%84%EC%9A%B0%EB%AF%B8%20%EA%B8%B0%EB%8A%A5%20%EC%A0%95%EC%9D%98.png)
동일한 툴킷의 몇 가지 명령에 대해 zsh 완료 기능을 작성 중입니다.
명령은 서로 다른 파일에 서로 다른 완성을 작성하고 싶을 정도로 다릅니다. (즉, 헤더 가 do_thingA
있는 파일 에 대한 완성이 있고 with 에 대한 완성이 있습니다 )._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
%