You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ZSH补全插件开发问题:多参数值处理需求

解决YunoHost ZSH补全插件的多参数补全问题

嘿,这个需求完全可以实现!我之前也折腾过ZSH补全的类似场景,咱们直接上解决方案:

核心补全函数写法

你需要调整_ynh_app_addaccess函数的_arguments配置,重点处理两个部分:允许多个应用的连续补全,以及-u选项后持续补全用户列表。完整代码如下:

_ynh_app_addaccess() {
    _arguments \
        '-u[为指定用户添加应用访问权限]:*用户:_ynh_users_list' \
        '*:应用名称:_ynh_app_list'
}

为什么这样写能解决问题?

咱们拆解一下关键配置:

  • *:应用名称:_ynh_app_list:这里的*表示这个位置参数可以重复任意次数,不管你已经输入了多少个应用名,按Tab都会继续调用_ynh_app_list给出应用补全建议,完美匹配你要的"输入单个应用后仍补全应用"的需求。
  • -u[...]:*用户:_ynh_users_list:*加在用户标签前,告诉ZSH这个选项可以接受任意多个用户参数。也就是说,一旦你输入了-u,不管后面已经输了多少个用户,再按Tab都会调用_ynh_users_list补全用户,不会跳回应用补全。

验证效果

按照这个写法,你测试以下场景都会符合预期:

  1. 输入ynh app addaccess <Tab> → 显示所有可访问的应用列表
  2. 输入ynh app addaccess foo-app1 <Tab> → 仍然显示应用列表,支持继续添加第二个应用
  3. 输入ynh app addaccess foo-app1 bar-app2 -u <Tab> → 切换到用户列表补全
  4. 输入ynh app addaccess foo-app1 bar-app2 -u barfoo1 <Tab> → 继续显示用户列表,支持添加第二个用户

额外提示

如果你的_ynh_app_list和_ynh_users_list还没实现,这里给个简单的参考模板(根据YunoHost实际命令调整):

# 补全已安装的YunoHost应用
_ynh_app_list() {
    local apps=($(ynh app list --installed))
    _describe 'YunoHost应用' apps
}

# 补全YunoHost系统用户
_ynh_users_list() {
    local users=($(ynh user list --all))
    _describe 'YunoHost用户' users
}

这样调整后,你的补全逻辑就完全符合命令的预期行为啦!

内容的提问来源于stack exchange,提问作者Buzuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:02:38