gpt4 book ai didi

autocomplete - zsh 在第三个参数上自动完成

转载 作者:行者123 更新时间:2023-12-04 17:38:42 27 4
gpt4 key购买 nike

我有一个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 也可以,但不推荐)。
  • 您希望在第三个参数上完成。为此,您的函数将如下所示:
    _arguments "3:<MENU>:<COMPLETION>"
    <MENU>是菜单描述,如果您启用了菜单描述,您将看到它。 (使用 zstyle 完成;阅读手册页或链接页面以获取更多信息)。<COMPLETION>是你可以完成的事情。例如,如果您使用:
    _arguments "3::(Foo Bar)"

    当您运行脚本并按下 <TAB> 时,您可以选择 FooBar .
    [注:没有<MENU>在那个例子中。如果您不需要菜单描述符,则可以省略它,如图所示]。
  • 您希望在 *.tar 上完成文件。您可以调用_files要做到这一点:
    _files -g \*.tar
  • 显示第一个参数的用法:那将是一个没有参数的完成(即参数 1)。我不确定你为什么只希望完成第三个选项而不是前两个(典型的使用说明),所以我不知道如何回答这个问题。如果您的脚本应该这样使用:script foo bar FILE.tar ,你不想完成foobar论据也是?
    当脚本在没有参数的情况下运行时,也许更好的解决方案是显示使用情况。

  • 完整的脚本如下所示:

    #compdef myscript

    _arguments "3:tar files:_files -g \*.tar"

    关于autocomplete - zsh 在第三个参数上自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10194558/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com