首页 > 解决方案 > 你如何禁用鱼壳的猜测自动完成功能?

问题描述

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

ls /etc/abc

然后点击<tab>,它会发出哔哔声,什么也不做,基本上让你知道它无法弄清楚如何完成它。/etc/abc在该特定命令的情况下,不存在以 开头的文件。

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

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

我可以看到有些人可能会喜欢这个功能,但对我来说,这非常烦人。也许我只是习惯于抨击。

有没有办法让鱼把它关掉,所以它永远不会取代我写的东西?如果我写了/etc/abc, hit <tab>,但它无法找出以它开头的完成,那就别管它了。不要用最好的猜测代替它。

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

更新:

我刚刚遇到的一个真实例子。

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

标签: fish

解决方案


并且可以完全更改您输入的内容,可能将您的 ls /etc/abc 更改为 ls /etc/fstab,

鱼不会/etc/abc/etc/fstab

它将的是模糊匹配您的命令,因此 eg /etc/ftwill match /etc/fstab,但这只是因为“f”和“t”都按该顺序在“fstab”中,并且只有当它是唯一可能的匹配时。

这不会发生/etc/abc,因为那不匹配/etc/fstab

因为在过去的某个时候,您可能输入了 ls /etc/fstab。

在这种情况下,它没有考虑历史。它实际上只将历史记录用于自动建议 - 您键入的内容的灰色延续,但这仅用于前缀匹配。

有没有办法让鱼把它关掉,所以它永远不会取代我写的东西?

Fish 没有提供改变这种行为的选项。

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

它只是 fish 自动补全的一个无名部分吗?

模糊匹配。


推荐阅读