.png)
私は同じツールキットからのいくつかのコマンドに対して zsh 補完関数を作成しています。
コマンドは十分に異なるため、異なるファイルに異なる補完を記述する必要があります。(つまり、 の補完はヘッダーのdo_thingA
あるファイルにあり、 の補完はのあるファイルにあります)。_do_thingA
#compdef do_thingA
do_thingB
_do_thingB
#compdef do_thingB
コマンドはそれぞれ異なりますが、共通する引数が1つあります。コマンド間で異なる点がたくさんあるため、ある時点ですべての_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
%