自动完成 – 在第3个参数的zsh中自动完成

自动完成 – 在第3个参数的zsh中自动完成,第1张

概述我有一个 shell脚本,它的用法是: foo.sh <name> <type> <*.tar.gz> 我想只设置一个完整的第三个参数. 如果按第一个参数,只显示用法. 我可以使用zsh的zshcomp来完成这项工作吗? 例如: foo.sh <tab> # display usagefoo.sh a b <tab> # show files match with *.tar.gz 我可以遵循 我有一个 shell脚本,它的用法是:

foo.sh <name> <type> <*.tar.gz>

我想只设置一个完整的第三个参数.
如果按第一个参数,只显示用法.

我可以使用zsh的zshcomp来完成这项工作吗?

例如:

foo.sh <tab>  # display usagefoo.sh a b <tab> # show files match with *.tar.gz

我可以遵循类似的剧本吗?

解决方法 要读的东西.

这是一篇讨论Z-Shell Completion System的博客文章.

有关更深入的讨论,请阅读this unix.stackexchange回答.

而且,一如既往,read the man pages!.

编辑:忘记添加:echo $fpath将显示zsh使用的函数路径.在OSX上,我有:/usr/local/share/zsh/4.3.17/functions,(位置可能因您而异),其中包含所有ZSH完成功能.看看_ssh,_ls,_tar等 – 它们都在那里,而且它们都有很多可以学习的漂亮功能.

解决问题:你应该去的方向.

但是你所要求的是可以实现的.有几个步骤.

>您需要编写一个z-shell完成函数.它需要位于fpath; zsh用于完成系统功能的函数路径. (如果它是一个小函数,将它放入〜/ .zshrc也可以,但不推荐).
>您希望在第3个参数上完成.为此,您的函数将如下所示:

_arguments "3:<MENU>:<COMPLETION>"

<菜单>是菜单说明,如果您启用了菜单说明,则会看到该说明. (这是使用zstyle完成的;阅读手册页或链接页面以获取更多信息).
< COMPLETION>是你可以完成的事情.例如,如果您使用:

_arguments "3::(Foo bar)"

当您运行脚本并按下< TAB>时,您可以选择Foo或bar.
[注意:没有< MENU>在那个例子中.如果您不想要菜单描述符,可以省略它,如图所示].
>您希望在* .tar文件上完成.你可以调用_files来做到这一点:

_files -g \*.tar

>显示第一个参数的用法:这是一个没有参数的完成(即参数1).我不确定为什么你只想要完成第三个选项而不是前两个(典型用法说明),所以我不知道如何回答这个问题.如果您的脚本应该像这样使用:script foo bar file.tar,您不想也要完成foo和bar参数吗?
也许更好的解决方案是在没有参数的情况下运行脚本时显示用法.

完整脚本看起来如下所示:

#compdef myscript_arguments "3:tar files:_files -g \*.tar"
总结

以上是内存溢出为你收集整理的自动完成 – 在第3个参数的zsh中自动完成全部内容,希望文章能够帮你解决自动完成 – 在第3个参数的zsh中自动完成所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1025038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存