如何查找 zsh 完成定義
有沒有辦法查找目前載入的 zsh 完成函式(只需將完成定義列印到標準輸出)。
我知道它們儲存在我的 fpath 上的某個地方,我可以做一些事情,比如
ag $fpath completionname
在文件中找到定義。有沒有更清潔的方法、zsh 函式或其他方法來做到這一點?
該命令的完成函式的名稱
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
orwhence
或顯示它$functions_source
。zmodload zsh/parameter (($+_comps[foo])) && autoload -r $_comps[foo] && ((+$functions_source[$_comps[foo]])) && cat $functions_source[$_comps[foo]]