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



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

如何找到特定命令的完成函数的名称?如何在shell中查找现有的compdef分配

背景

我的程序包装了nvim,并且在我的shell中没有_nvim函数,我猜它将是完成函数。所以我假设nvim使用的完成函数实际上是_vim,但为了学习,这个问题更一般。

键入命令加一个空格,然后按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)

这告诉您,对于命令nvim的参数,补全系统将调用_vim,然后调用_arguments,后者将添加argument-restoptions补全。然后,_arguments调用_vim_files,后者调用_files,后者添加globbed-files补全。

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

% print $_comps[nvim]
_vim

最新更新