Bash 完成动态行为

Bash 完成动态行为

我希望根据使用上下文让“tab”具有 2 种不同的行为。
我希望bind '"\t":complete'除了用户尝试完成“mybashfunction”命令的参数之外,任何时候都具有默认行为。在这种情况下,我调用一个特殊函数来生成完成,但我希望“tab”像bind '"\t":menu-complete'设置时一样工作。

答案1

我相信它的 readline 库每次只支持一种制表符补全行为。

答案2

这就是你要找的东西吗?Bash:菜单仅适用于少数匹配项

答案3

您可以使用 bash 完整规则来实现这一点...

_myfunc() {
    _opts="zero one two"
    # COMPREPLY is bash built-in for array of possible completions
    COMPREPLY=()
    # cur & prev are current & previous words typed in shell
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    COMPREPLY=( $( compgen -W "${_opts}" -- ${cur} ))
    return 0
}
complete -F _myfunc myfunc

这不会影响 bash 的正常完成,但是当您使用 tab 键完成 myfunc 时,您将获得“零一二”作为可能的完成。

编辑:哦是的,将它塞进你的 bashrc 或类似文件中,以便它在新的 shell 中获取。

相关内容