Zsh 完成:如何找到用于完成特定命令的函数?
Zsh completion: How to find the function that is used for completions with a specific command?
我正在为我写的 shell script/program 写一个 zsh 补全函数。在完成过程中的某个时刻,我想使用另一个命令的完成功能来处理剩余的完成。
如何找出特定命令的完成函数被调用?如何在我的 shell 中查找现有的 compdef
作业?
背景
我的程序包装了 nvim
并且在我的 shell 中没有 _nvim
函数,我猜它是完成函数。所以我假设 nvim
使用的完成函数实际上是 _vim
但是这个问题更笼统以便学习。
只需键入命令加上 space,然后按 CtrlX,然后按 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-rest
和 options
完成。然后,_arguments
调用 _vim_files
,后者调用 _files
,后者添加 globbed-files
完成。
或者,如果您只对传递给 compdef
的顶级完成函数感兴趣,只需这样做:
% print $_comps[nvim]
_vim
我正在为我写的 shell script/program 写一个 zsh 补全函数。在完成过程中的某个时刻,我想使用另一个命令的完成功能来处理剩余的完成。
如何找出特定命令的完成函数被调用?如何在我的 shell 中查找现有的 compdef
作业?
背景
我的程序包装了 nvim
并且在我的 shell 中没有 _nvim
函数,我猜它是完成函数。所以我假设 nvim
使用的完成函数实际上是 _vim
但是这个问题更笼统以便学习。
只需键入命令加上 space,然后按 CtrlX,然后按 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-rest
和 options
完成。然后,_arguments
调用 _vim_files
,后者调用 _files
,后者添加 globbed-files
完成。
或者,如果您只对传递给 compdef
的顶级完成函数感兴趣,只需这样做:
% print $_comps[nvim]
_vim