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

问题描述

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

如何找出特定命令的完成功能?如何在Shell中查找现有的compdef分配?

背景

我的程序包装了nvim,并且我的外壳中没有_nvim函数,我猜想这是完成函数。因此,我假设nvim使用的完成函数实际上是_vim,但是为了学习这个问题更笼统。

解决方法

只需键入命令加一个空格,然后按 Ctrl X ,然后按 H 即可运行_complete_help widget。例如:

% 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完成。

或者,如果您只对传递给compdef的顶级完成功能感兴趣,请执行以下操作:

% print $_comps[nvim]
_vim