如何禁用 fish shell 的猜测自动完成功能?

How do you disable fish shell's guessing autocompletion feature?

在 bash 中,如果您键入如下内容:

ls /etc/abc

然后点击<tab>,它会发出哔哔声,什么都不做,基本上是让你知道它不知道如何完成它。对于该特定命令,以 /etc/abc 开头的文件不存在。

在 fish 中,它会使用一些复杂的算法来弄清楚它认为您的意思,并且可以完全改变您键入的内容,可能会将您的 ls /etc/abc 更改为 ls /etc/fstab,因为在在过去的某个时刻,您可能输入了 ls /etc/fstab.

我确定它不是那么武断,但事实是,它删除了我的 /etc/abc arg,并用它认为我的意思替换了它。有时,我在一个字符上犯了一个错误,而不是像在 bash 中那样返回并修复我的错误,点击 <tab> 替换了我写的整个东西,迫使我重写整个 arg。

我知道有些人可能会喜欢这个功能,但对我来说,这太烦人了。也许我只是习惯了bash.

有没有办法让 fish 关闭它,让它永远不会取代我写的东西?如果我写了 /etc/abc,点击了 <tab>,它无法找出以此开头的补全,就别管它了。不要用它最好的猜测替换它。

我什至不知道这个功能叫什么。它甚至有名字吗,还是它只是 fish 自动补全的无名部分?

更新:

一个真实的例子我刚刚 运行 进入。

我在当前目录中有一个名为 lib.py 的文件。我输入 git difftool li 并点击 <tab>。它取代了我用 git difftool templates/nxt_connect/dish_controls.html 写的内容,立即让我想刺伤某人,因为我必须删除它帮助我填写的超长字符串,然后再试一次。更糟糕的是,我假设我输入了错误的内容,所以我会尝试完全相同的事情,并最终得到完全相同的结果,只是意识到 fish 没有为 [=25= 内置的完成文件], 这就是为什么它甚至不检查我当前目录中的文件的原因。

and can change what you typed completely, possible changing your ls /etc/abc to ls /etc/fstab,

鱼不会把/etc/abc变成/etc/fstab

做的是fuzzy-match你的命令,例如/etc/ft 将匹配 /etc/fstab,但这只是因为“f”和“t”都按该顺序在“fstab”中,并且只有当它是唯一可能的匹配时。

/etc/abc 不会发生这种情况,因为它不匹配 /etc/fstab

because at some point in the past, you may have typed ls /etc/fstab.

在这种情况下不考虑历史。它实际上只使用自动建议的历史记录 - greyed-out 您键入的内容的延续,但这只会进行前缀匹配。

Is there a way to have fish turns this off, so it never replaces what I wrote?

Fish 不提供更改此行为的选项。

下一个 fish 版本(3.2 版)将提供“撤消”功能(默认绑定到 ctrl+z),因此您可以通过按该功能撤消任何匹配项。

is it just a nameless part of the autocompletion of fish?

模糊匹配。