如何将现有的完成复制到zsh中的其他命令

时间:2012-02-17 22:00:44

标签: autocomplete zsh

我有一个自定义脚本,它将主机名作为参数。我知道我可以像这样轻松复制现有的ssh完成:

compdef myscript=ssh

但这只能完成第一个参数。是否有一种简单的方法可以为所有参数启用相同的完成功能?

1 个答案:

答案 0 :(得分:1)

我不知道 easy 方法可以启用自定义命令的完成功能。假设你有一个包含许多允许参数foobar bas的命令baz,那么完成很简单:你可以有foo barfoo basfoo baz。但是,如果他们不是or,那么你可以将这三者结合起来。

当你的'深度'超过1时会变得更糟(bar可以带参数carcascaz,例如) 。

zsh中,我的一般理解是命令的完成详见completion functions。这些函数是特定于应用程序的,因为每个应用程序的参数都特定于这些应用程序。例如,tmux(终端多路复用器,类似于screen,如果你不熟悉的话)有一个相当复杂的完成函数:here's a link

如果您想编写自己的完成功能,则可以使用该文档并可访问。这里有一堆链接,我(慢慢地)正在努力工作 - 他们肯定会告诉你如何完成工作,但是有很多阅读。 Z-Shell是一个复杂的野兽。

您特别想要启用类似主机名的参数的完成,并且您已经将ssh作为主意。 zsh的{​​{1}}完成函数在ssh中定义,如果您有ZSH源。如果没有,这是一个link


当然,this SO question非常相似。如果Completion/Unix/Command/_sshcompdef参数足够相同,则myscript可以单独执行您想要的操作。