在 bash 完整功能中禁用 COMPREPLY 排序

在 bash 完整功能中禁用 COMPREPLY 排序

我有一个单词列表,这些单词应该按照某个键的完成顺序出现,但 bash 似乎在内部对分配给COMPREPLY数组的内容进行排序。如何避免这种情况?

例子:

_comm() {
    _init_completion -s -n : || return
    case $prev in
        -a) COMPREPLY=(zxy abcdef tyuu fgsfds)
            ;;
    esac
}
complete -F _comm comm

如果运行此代码,bash 应该完成

$ comm -a 

abcdef fgsfds tyuu zxy

即按字母顺序排序。

答案1

从 Bash 4.4 开始你可以使用nosort选项。在您的示例中,将最后一行更改为:

complete -o nosort -F _comm comm

并且您应该无需按字母顺序排序即可完成。

重要提示:选项(用 指定-o必须位于函数之前( -F)。这就是为什么 coderofsalvation 的代码不起作用。

答案2

应该修改完整命令即可实现:

complete -F _comm comm

进入:

complete -F _comm comm -o nosort 

正如中提到的文档:

但是我没有让它在 bash 4 上工作:/

似乎这是一个已记录但尚未实​​现的控制 readline 变量的功能rl_sort_completion_matches

更多信息

相关内容