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中自动完成所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)