gpt4 book ai didi

autocomplete - 如何 "copy"对 zsh 中其他命令的现有完成

转载 作者:行者123 更新时间:2023-12-04 05:11:04 25 4
gpt4 key购买 nike

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

compdef myscript=ssh

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

最佳答案

我不知道启用自定义命令完成的简单方法。假设你有一个命令 foo带有一堆允许的参数 bar , bas baz ,那么完成就很容易了:你可以有 foo bar , foo bas , 或 foo baz .如果他们不是 or 'd,不过,你可以有这三者的任何组合。

当“深度”大于 1 时,情况会变得更糟(例如 bar 可以接受参数 carcascaz )。

zsh ,我的大致理解是,命令的补全在 completion functions 中有详细说明。 .这些函数是特定于应用程序的,因为每个应用程序的参数都是特定于这些应用程序的。例如,tmux (终端多路复用器,类似于 screen ,以防您不熟悉)具有相当复杂的完成功能: here's a link .

如果您想编写自己的完成函数,文档是可用且可访问的。这里有一堆我正在(慢慢地)完成的链接——它们肯定会告诉你如何完成工作,但有很多阅读。 Z-Shell 是一个复杂的野兽。

  • Z-Shell completion introduction
  • Z-Shell functions: Writing and loading your own
  • ZSH Users Guide, Ch. 6: "Completion, old and new"

  • 您对启用类似主机名的参数的完成特别感兴趣,并且您已经挑出了 ssh作为想法。 zsh ssh 的完成函数在 Completion/Unix/Command/_ssh 中定义,如果您有 ZSH 源。如果没有,这里是 link .

    当然, this SO question比较相似。 compdef如果 myscript,单独做你想做的事和 ssh参数足够一致。

    关于autocomplete - 如何 "copy"对 zsh 中其他命令的现有完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9336058/

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