zsh 完成定義の検索方法

zsh 完成定義の検索方法

現在ロードされている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にソースパスを確認させるようにしてから、またはまたはwhichwhence使用して表示できます$functions_source

zmodload zsh/parameter
(($+_comps[foo])) &&
autoload -r $_comps[foo] &&
((+$functions_source[$_comps[foo]])) &&
cat $functions_source[$_comps[foo]]

関連情報