【问题标题】:How can I provide tab completions to fish shell from my own script?如何从我自己的脚本中为 fish shell 提供选项卡补全?
【发布时间】:2014-01-17 06:20:56
【问题描述】:

我正在运行 Ubuntu 13.10 和 fish 2.1.0。我想为自己编写一个 Python 脚本来从命令行执行一些任务。该脚本将需要命令行参数。

如何编写我的脚本,以便鱼可以请求并获取给定参数的可能值。潜在价值列表是动态的。也就是说,它将以编程方式确定(例如,与某些条件匹配的文件夹名称列表)。

我想要的最终结果是这样的:

user@machine ~> myprog argument=fol<TAB>
folder1  folder2  folder3

myprog 是我的脚本文件,argument 是参数名称,folder1 等是我脚本中某个函数生成的有效值。

这可能吗?如果可以,怎么做?

【问题讨论】:

标签: shell autocomplete tab-completion fish


【解决方案1】:

您应该为您的脚本创建一个fish autocomplete functionsource 它或将它放在~/.config/fish/completions/myprog.fish 文件夹中。

参考:fish docs

【讨论】:

  • 感谢@AlexandrePaes,我已经更新了答案
【解决方案2】:

改编自zanchey's comment on GitHub

如果您有一个程序myprog 采用--_completion 选项,您可以为myprog 编写一个完成存根,如下所示:

complete --command myprog --arguments '(myprog --_completion (commandline -cp)'

然后您的程序将被调用为myprog --_completion myprog some arguments here,并且您可以使用适当的完成来响应。它应该只返回正在完成的当前令牌(您也可以使用(commandline -ct) 将其传递给程序,或自己对其进行令牌化),后跟一个选项卡和一个简短的描述(可选)。多个补全用新行分隔。

注意事项:

特别是对于 Python 脚本,以下库可能会在未来某个时候支持鱼补全(但目前还不支持):

【讨论】:

  • 我试过类似的命令。当我在 Fish 会话中执行它时它确实起作用了,但是当我将它放入 config.fish 时它不起作用。
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多