同じツールキット内の複数のコマンドに対して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
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
%