shell macOS子命令的zsh完成

eqoofvh9  于 2023-01-05  发布在  Shell
关注(0)|答案(1)|浏览(142)

bounty将在4天后过期。回答此问题可获得+500声望奖励。Sridhar Ratnakumar希望引起更多人对此问题的关注:我想要一个简单的解决方案,特别是在macOS zsh的这个简单的用例。

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

  • , foo
  • , bar
  • , qux

(Each以上的可以在右边接受进一步的可选参数)。
这个脚本在macOS上运行的 * 最少 * zsh完成代码是什么?这样,当我键入,,然后键入<TAB>时,shell将自动完成这三个选项:foo酒吧和qux。

sycxhyv7

sycxhyv71#

以下是将zsh补全添加到,命令的最少步骤:
1.启用compinit

autoload -U compinit

1.启用compdef

compinit

1.定义一个完成函数,用于从/用给定的一组值完成第一个参数。

_,() { _arguments -C '1: :(foo bar qux)'; }

1.将前面的函数_,设置为,命令的完成函数:

compdef _, ,

现在,如果键入CommaSpaceTab,zsh应输出:

bar  foo  qux
旁边

可以为每个子命令bar/foo/qux添加进一步的完成;请看这个文档示例。

相关问题