【问题标题】:zsh completion script with globbing带通配符的 zsh 完成脚本
【发布时间】:2021-11-13 12:03:31
【问题描述】:
  1. 我想编写一个 zsh-completion 脚本,该脚本完成与当前工作目录不同的目录中的文件。 (我可以存档,见下文。)
  2. 此外,用户应能够对已完成的命令使用通配符。 如何归档?

例子:

假设我们要完成一个名为rumple 的命令。 rumple 将来自~/rumple 的文件列表作为参数(可能是嵌套的目录/文件)。有效的调用可能是:

rumple pumple romple/pample

这意味着rumple 将有效地处理~/rumple/pumple~/rumple/romple/pample

现在用于 rumple 的 zsh-completion 脚本 _rumple 可能如下所示:

#compdef rumple

_path_files -W ~/rumple

这完成了任务的第一部分:rumple p<TAB> 将完成到rumple pumple(假设 ~/rumple 中没有其他以 'p' 开头的文件)。但是第二部分不起作用。 rumple **/p* 应该完成到rumple pumple romple/pample,即使当前工作目录不是~/rumple

【问题讨论】:

    标签: shell zsh zsh-completion


    【解决方案1】:

    通常您会让用户通过_match 完成程序或glob_complete 选项来配置此类行为。

    但是你可以在某种程度上强制它如下:

    #compdef rumple
    local a=( ~/rumple/**/* )
    compstate[pattern_match]='*'
    compadd ${a#$HOME/rumple/}
    

    【讨论】:

    • 我会去看看。看来我需要先了解更多关于 zsh-completion 的知识。
    • 嗯,我试过你的例子,但它不起作用。但我也会看看 _match 和 glob_complete。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多