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

ZSH补全匹配控制:实现资源路由的模糊匹配需求

ZSH资源路由补全:实现包含匹配或忽略最后段的方案

方案一:自定义匹配规则实现子串匹配

ZSH的_multi_parts支持通过-M参数传递匹配规则给compadd,要实现最后一段的包含匹配,只需设置允许子串匹配的规则:

_multi_parts '/' -M 'r:|=* r:[/]=*' "$(mycmd /some/resource/id)"
  • r:|=*:允许输入的片段作为子串出现在候选的对应分段中,而非仅前缀匹配
  • r:[/]=*:确保路径分割符/的处理逻辑正确,不干扰其他分段的匹配

这样当你输入/resource/identifier/bc时,会匹配到最后一段包含bc的候选(如/resource/identifier/abc456/、/resource/identifier/123abcXYZ/)。

方案二:忽略最后一段标识符补全

如果不需要匹配最后一段,直接补全当前路径下的所有子资源,可以先截断输入路径的最后一段,再调用mycmd:

# 提取当前输入路径,去掉最后一段
local current_path="${words[CURRENT]%/*}"
# 处理根路径的特殊情况(如输入"/bc"时,截断后为空,需重置为"/")
[[ -z "$current_path" ]] && current_path="/"
# 生成补全候选
_multi_parts '/' "$(mycmd "$current_path")"

通过${words[CURRENT]%/*}参数展开截断最后一段路径,用处理后的路径调用mycmd,即可获取当前路径下的所有子资源补全项。

调试提示

  • 用zsh -x运行脚本,查看补全过程中的变量值和命令执行细节,便于排查问题
  • 如果mycmd返回的候选末尾带/,可先用sed 's/\/$//'清理后再传递给_multi_parts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:25:34