【问题标题】:Zsh completions with multiple repeated options具有多个重复选项的 Zsh 完成
【发布时间】:2016-11-29 23:47:26
【问题描述】:

我正试图按照自己的意愿弯曲 zsh,我选择的 shell,但我对补全的语法和操作完全不知所措。 我的用例是这样的:我希望在“-e”选项下完成“ansible-playbook”支持三种变体:

  • 正常文件完成:ansible-playbook -e vars/file_name.yml
  • 前置文件完成:ansible-playbook -e @vars/file_name.yml
  • 任意字符串:ansible-playbook -e key=value

我从https://github.com/zsh-users/zsh-completions/blob/master/src/_ansible-playbook 开始,它工作得很好,但需要修改以支持前缀文件路径。为了实现这一点,我更改了以下几行(-e 行):

...
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:(EXTRA_VARS)"\
'--flush-cache[clear the fact cache]'\

到这里:

...
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:__at_files"\
'--flush-cache[clear the fact cache]'\

并添加了“__at_files”功能:

__at_files () {
  compset -P @; _files
}

这可能很无聊,但是对于以前从未遇到过这种情况的人来说,我很高兴这解决了我的问题,或者我是这么认为的。

如果我有多个 '-e' 参数,这完全是一个受支持的模型(类似于 docker 允许多个 -v 或 -p 参数的方式),这会让我失败。这意味着 first '-e' 参数将具有我的前缀完成工作,但在那之后的任何 '-e' 参数都变成 'dumb' 并且只允许正常的 '_files' 完成我能说什么。因此以下内容将无法正确完成:

ansible-playbook -e key=value -e @vars/file

但这会为文件本身完成:

ansible-playbook -e key=value -e vars/file

我搞砸了吗?我看到这个特定完成插件的“-M”选项具有相同类型的行为(它也变成“哑”并执行基本文件完成)。我可能只是没有搜索正确的术语或术语组合,或者可能在相当复杂的文档中错过了涵盖此内容的内容,但同样,只有几天的研究经验,我迷失了。

【问题讨论】:

    标签: zsh ansible-playbook oh-my-zsh tab-completion


    【解决方案1】:

    如果多个 -e 选项有效,则 _arguments 规范应以 * 开头,而不是:

    "(-e --extra-vars)"{-e,--extra-vars}"[EXTR ....
    

    使用:

    \*{-e,--extra-vars}"[EXTR ...
    

    (-e --extra-vars) 部分表示不能跟在指定选项后面的选项列表。因此不再需要这样做,因为它可能是有效的,例如:

    ansible-playbook -e key-value --extra-vars @vars/file
    

    【讨论】:

      猜你喜欢
      • 2013-02-14
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2021-07-15
      相关资源
      最近更新 更多