代码之家  ›  专栏  ›  技术社区  ›  mickp

如何定义函数名“pattern”的完成?

  •  1
  • mickp  · 技术社区  · 6 年前

    我有几个函数只处理目录,所有函数名都遵循这个模式(以 爱迪尔 ):

    something_dir () { ... }
    something_else_dir() { ... }
    ...
    

    对于所有这些,我定义的完成方式是:

    complete -A directory something_dir something_else_dir ...
    

    是否可以自动定义所有函数的完成,以便每个新函数以 爱迪尔 只填写目录吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Socowi    6 年前

    使用 compgen -A function 列出所有功能;然后 grep -E '.*_dir$' 筛选以结尾的函数 _dir .

    complete -A directory $(compgen -A function | grep -E '.*dir$')
    

    这假定所有函数名以 爱迪尔 没有特殊的符号,比如 * 和空间。根据 specification ,情况应该总是这样。

    此命令将只为已存在的函数设置完成。要自动添加将在交互式会话中定义的函数的完成,请将命令添加到 PROMPT_COMMAND 以便在每次提示时执行。

    PROMPT_COMMAND="complete -A directory \$(compgen -A function | grep -E '.*dir$')"