我有示例命令foo
,它采用一个或多个文件名,以及 3 个 --options 的任意组合。此外,可以在命令行上的任何位置(文件名之前、之后或之间)指定选项。
foo --bbb file.txt --aaa file2.txt --ccc
我有这个完成文件,我在其中指定了药水:
#compdef foo
local -a args
args+=(
'--aaa'
'--bbb'
'--ccc'
)
我必须在末尾添加什么,以便使用我的 --options 完成本地文件?
答案1
您可以致电compadd
您想要声明更多完成次数就可以内置多次。通常,这通过多种方式之一发生“新”完成系统的辅助功能。
您可以做的最简单的事情就是同时调用compadd
和_files
。
#compdef foo
local -a args
args=(--aaa --bbb --ccc)
compadd -- $args
_files
您应该compadd
调用辅助函数,例如_describe
它允许根据上下文配置完成并具有描述。
#compdef foo
local args
args=('--aaa:Enable aye' '--bbb:Enable bee' '--ccc:Enable sea')
_describe -o 'Options' args
_files
这_arguments
function 通常可以更轻松地指定命令的完成,尽管在简单的情况下并没有太多好处。如果您的命令支持--
指示后面的所有内容--
都是文件名而不是选项(即使它以破折号开头),请务必使用它 - 这就是_arguments
s -S
option 的作用。 before选项*
表示该选项可能出现多次;如果没有它,如果该选项已经存在,则不会再次提供该选项。
#compdef foo
_arguments -S \
'*--aaa[Enable aye]' \
'*--bbb[Enable bee]' \
'*--ccc[Enable sea]' \
'*:file:_files'
如果您的命令支持--help
以足够接近 GNU 建立的事实标准的格式打印帮助,您可以告诉_arguments
解析 的输出--help
,然后您只需要指定无法从--help
输出中推断出的更精细的行为。
#compdef foo
_arguments --
如果您不需要从--help
输出中推断出的内容之外的任何内容,则无需定义完成函数:只需声明_gnu_generic
作为命令的完成函数。
compdef _gnu_generic foo