Zsh 补全:如何查找用于特定命令补全的函数?

Luc*_*cas 2 zsh zsh-completion

我正在为我编写的 shell 脚本/程序编写 zsh 补全函数。在完成过程中的某个时刻,我想使用另一个命令的完成功能来处理完成的其余部分。

如何找出特定命令的完成函数的调用方式?如何查找compdefshell 中现有的分配?

背景

我的程序换行nvim,并且我的 shell 中没有_nvim我猜想的函数是完成函数。所以我假设使用的完成函数nvim实际上是_vim,但这个问题更一般,以便学习。

Mar*_*ert 6

键入命令加一个空格,然后按CtrlX运行H_complete_help小部件。例如:

% nvim # press ^Xh here
tags in context :completion::complete:nvim::
    argument-rest options  (_arguments _vim)
tags in context :completion::complete:nvim:argument-rest:
    globbed-files  (_files _vim_files _arguments _vim)
Run Code Online (Sandbox Code Playgroud)

这告诉您,对于 command 的参数nvim ,完成系统将调用_vim,然后调用_arguments,添加argument-restoptions完成。然后,_arguments调用_vim_files,调用_files,添加globbed-files完成。

或者,如果您只对特定命令的顶级完成函数集感兴趣,请执行以下操作:

% print $_comps[nvim]
_vim
Run Code Online (Sandbox Code Playgroud)