macOS zsh 子命令自动补全

3

我有一个名为,的脚本,它接受一组有限的子命令。假设这个集合是(foo bar qux)。因此,以下是该脚本可接受的CLI调用:

  • , foo
  • , bar
  • , qux

(上述每个都可以带有右侧的进一步可选参数)。

在macOS上,这个脚本的最小 zsh完成代码是什么?当我键入, 后跟<TAB>时,shell将自动完成这三个选项:foo、bar和qux。

1个回答

7

以下是将zsh补全功能添加到,命令的最小步骤:

  1. 启用 compinit

    autoload -U compinit
    
  2. 启用 compdef

    compinit
    
  3. 定义一个完成第一个参数的函数,从/用给定的一组值完成.

    _,() { _arguments -C '1: :(foo bar qux)'; }
    
  4. 将上一个函数 _, 设置为 , 命令的完成函数:

    compdef _, ,
    
现在,如果您键入逗号 空格 制表符zsh应该输出:
bar  foo  qux

侧边栏

可以为每个子命令bar/foo/qux添加更多的完成功能;请查看这个文档化的示例


谢谢!“aside”也很有帮助。具体来说,我希望将完成委托给相应的命令。例如,“,git”应该委托给git的自动完成。如果需要,我可以另开一个问题。 - Sridhar Ratnakumar
1
@SridharRatnakumar 我尝试从_,中调用git的完成函数,但它会导致zsh崩溃!!我认为这值得另外提一个问题。 - Fravadona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接