여러 완성 파일(zsh)에서 사용할 탭 완성 도우미 기능 정의

여러 완성 파일(zsh)에서 사용할 탭 완성 도우미 기능 정의

동일한 툴킷의 몇 가지 명령에 대해 zsh 완료 기능을 작성 중입니다.

명령은 서로 다른 파일에 서로 다른 완성을 작성하고 싶을 정도로 다릅니다. (즉, 헤더 가 do_thingA있는 파일 에 대한 완성이 있고 with 에 대한 완성이 있습니다 )._do_thingA#compdef do_thingAdo_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파일을 다음과 같이 배치하기만 하면 됩니다 .fpathfirstfuncdir

% 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
% 

관련 정보