現在ロードされているzsh補完機能を見つける方法はありますか(完全な定義をstdoutとして印刷するだけです)。
ag $fpath completionname
私はそれらが私のfpathのどこかに保存されていることを知っており、ファイル内の定義を見つけるのと同じことをすることができます。よりきれいな方法、zsh機能、またはこれを実行する機能はありますか?
答え1
このコマンドの完成関数名foo
はです$_comps[foo]
。
関数のコードを表示するには をmyfunc
実行するかecho -E $functions[myfunc]
、echo $functions[myfunc]
bsd_echo
開くオプションまたはprint -rl $functions[myfunc]
。したがって、コマンド補完機能のコードを表示するには、をfoo
実行してくださいecho -E $functions[$_comps[foo]]
。または、次を実行します。which $_comps[foo]
関数名にエイリアスがない場合。
これはコメントのないコードを示しています(そして正規化された空白があります。これはzshによって内部的に格納されたバイトコードの人が読めるダンプです)。コードで定義されているソースファイルを表示するには、次の手順を実行します。whence -v $_comps[foo]
またはecho $functions_source[$_comps[foo]]
。これfunctions_source
配列は次の場合にのみ使用できます。基準寸法zsh/parameter
ロードされ(これを使用してこれを実行できますzmodload zsh/parameter
)、zsh 5.4から始めます。
まだ関数を使用していない場合は、builtin autoload -XU
コードの代わりにソースパスなしでこのような内容が表示されます。ソースパスを表示するには:autoload -r $_comps[foo]
まず、zshにソースパスを確認させるようにしてから、またはまたはwhich
をwhence
使用して表示できます$functions_source
。
zmodload zsh/parameter
(($+_comps[foo])) &&
autoload -r $_comps[foo] &&
((+$functions_source[$_comps[foo]])) &&
cat $functions_source[$_comps[foo]]