Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autocomplete ZSH completion-每个参数有多个项_Autocomplete_Zsh_Tab Completion_Cardinality - Fatal编程技术网

Autocomplete ZSH completion-每个参数有多个项

Autocomplete ZSH completion-每个参数有多个项,autocomplete,zsh,tab-completion,cardinality,Autocomplete,Zsh,Tab Completion,Cardinality,我正在尝试为YunoHost编写一个完成插件。我正在处理以下情况,其中一个参数(可选或不可选)可以包含多个值: ynh app addaccess apps [apps ...] [-u [USERS [USERS ...]]] 典型用法: ynh app addaccess foo-app1 bar-app2 -u barfoo1 foobar2 我已经通过下面的代码设法获得了对这两个参数应用程序和用户的建议,但我无法获得与命令所能处理的一致的行为。 (\u-ynh\u-app\u-li

我正在尝试为YunoHost编写一个完成插件。我正在处理以下情况,其中一个参数(可选或不可选)可以包含多个值:

ynh app addaccess apps [apps ...] [-u [USERS [USERS ...]]]
典型用法:

ynh app addaccess foo-app1 bar-app2 -u barfoo1 foobar2

我已经通过下面的代码设法获得了对这两个参数
应用程序
用户
的建议,但我无法获得与命令所能处理的一致的行为。 (
\u-ynh\u-app\u-list
\u-ynh\u-user\u-list
是对
compadd
的调用)

上述代码基本有效,但以下代码除外:

  • 输入单个应用程序名称后,它将切换到用户
  • -u
    接受单个用户(但多个
    -u
    实例有效)
我尝试了
*:apps:\u ynh\u app\u list
,但是
ynh app addaccess foo-app1-u user1
调用
\u ynh\u app\u list
而不是
\u ynh\u users\u list


我想得到的是:

  • ynh-app-addaccess
    显示由
    \uuuuynh\uapp\u列表提供的补全信息
  • ynh-app-addaccess foo-app1
    仍显示
    \uuuuuynh\u-app\u列表提供的补全信息
  • 一旦输入了
    -u
    ,并且无论
    -u
    之后的字数是多少,所有的完成建议都应该来自
    \uuuuuuuynh\u用户列表
    yunohost app addaccess foo-app1 bar-app2-ubarfoo1 foobar2
    仍然使用用户名表单
    \uynh\u用户列表

是否可以至少在最后一项(
[-u USER[USER…]]
)中实现这一点?非常感谢!:)

使用排除选项/参数功能列表可以:

_yunohost_app_addaccess() {
    _arguments -s -C \
        {1,'*'}:apps:_ynh_app_list \
        '(*)'{-u,--users}'[users]:*:users:_ynh_users_list'
}
ynh addaccess app[APPS…]
部分可以通过普通参数规范完成<代码>1:消息:操作和
*:消息:操作

大括号扩展导致人手不足:
{1',*'}:apps:_ynh_app_list

[-u USER[USER…]]
部分可以由optspec完成,前面有一个排除列表和
:*模式:消息:操作
带有空的
模式
<代码>'(*)-OPTNAME[解释]:*:消息:操作'


以下是zsh手册中的排除清单,供参考:



上面的每种形式都可以在括号中的选项名称和参数编号前加上一个列表。如果给定选项位于命令行上,则不会提供括号中指示的选项和参数。例如,
(-two-three1)-one:…
完成选项
-one
;如果此选项出现在命令行上,则选项
-two
-two
以及后面的第一个普通参数将不会完成<代码>(-foo):…指定一个普通的参数完成<代码>-foo如果该参数已存在,则不会完成

其他项目可能出现在排除选项列表中,以指示在匹配当前规范时不应应用的各种其他项目:剩余参数的单星(
*
)(即形式为
*:…
)的规范;所有正常(非选项)参数的冒号(
);所有选项都有一个连字符(
-
)。例如,如果
(*)
出现在选项之前,并且该选项出现在命令行上,则剩余参数列表(上表中以
*:
开头的参数)将不会完成

---


谢谢D虽然我多次阅读了文档的这一部分,但我没有成功地以这种方式实现它=/
_yunohost_app_addaccess() {
    _arguments -s -C \
        {1,'*'}:apps:_ynh_app_list \
        '(*)'{-u,--users}'[users]:*:users:_ynh_users_list'
}