如何编写支持指定目录补全和glob通配符的zsh-completion脚本
zsh-completion通配符补全实现方案
修改后的_rumple补全脚本
#compdef rumple # 定义命令对应的根目录 local rumple_root=~/rumple # 检测当前输入是否包含通配符 if [[ $PREFIX == *[\*\?\[]* ]]; then # 局部启用glob相关选项,不影响全局配置 setopt localoptions extendedglob nullglob globstar # 基于根目录展开通配符匹配结果 local -a glob_matches glob_matches=(${rumple_root}/${PREFIX}) # 剔除根目录前缀,仅保留命令需要的相对路径 glob_matches=(${glob_matches#${rumple_root}/}) # 输出匹配结果到补全列表 compadd -a glob_matches return 0 fi # 无通配符时走原有普通路径补全逻辑 _path_files -W ${rumple_root}
必要配置
你需要在~/.zshrc中加入以下配置开启递归glob支持:
setopt globstar
配置完成后重启zsh或执行source ~/.zshrc生效。
效果验证
配置完成后,在任意工作目录输入rumple **/p*按下TAB,即可补全出~/rumple目录下所有匹配**/p*规则的相对路径,符合需求。
内容的提问来源于stack exchange,提问作者Lord Bo
相关产品推荐
相关产品推荐

