如何禁用 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?
模糊匹配。
在 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?
模糊匹配。