加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:52:08 所属栏目:Linux 来源:网络整理
导读:我有一个 shell脚本,它的用法是: foo.sh name type *.tar.gz 我想只设置一个完整的第三个参数. 如果按第一个参数,只显示用法. 我可以使用zsh的zshcomp来完成这项工作吗? 例如: foo.sh tab # display usagefoo.sh a b tab # show files match with *.tar.g
我有一个 shell脚本,它的用法是:

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

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

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

例如:

foo.sh <tab>  # display usage
foo.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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读