问题描述
在bash中,如果您键入以下内容:
ls /etc/abc
然后按<tab>
,它会发出哔声,并且什么也不做,基本上是让您知道它无法弄清楚如何完成它。对于该特定命令,不存在以/etc/abc
开头的文件。
在鱼中,它将使用一些复杂的算法来弄清楚它的含义,并且可以更改您完全键入的内容,有可能将ls /etc/abc
更改为ls /etc/fstab
,因为在某个时候过去,您可能输入了ls /etc/fstab
。
我确定它不是那么随意,但事实是,它删除了我的/etc/abc
arg,并用它认为的含义替换了它。有时,我在一个字符中犯了一个错误,而不是像在bash中那样回过头来纠正错误,打<tab>
取代了我写的全部内容,迫使我重写了整个arg。
我可以看到有人可能会喜欢此功能,但是对我来说,这真是令人讨厌。也许我只是习惯扑面而来。
有没有办法让鱼把它关掉,所以它永远不能代替我写的东西?如果我写了/etc/abc
,请按<tab>
,但它无法找出以此开头的补全,就别管它了。不要用最好的猜测代替它。
我什至不知道该功能的名称。它甚至有一个名字,还是只是鱼类自动完成的无名部分?
更新:
我刚遇到的一个真实例子。
我在当前目录中有一个名为lib.py
的文件。我键入git difftool li
并按<tab>
。它用git difftool templates/nxt_connect/dish_controls.html
代替了我写的内容,立即使我想刺杀某人,因为我必须删除它为我有用地填充的超长字符串,然后重试。更糟糕的是,我假设我输入了错误的内容,因此我将尝试完全相同的操作,并最终获得完全相同的结果,只是意识到fish没有内置{{1}的完成文件},这就是为什么它甚至不检查我当前目录中文件的原因。
解决方法
并且可以更改您完全键入的内容,可能将ls / etc / abc更改为ls / etc / fstab,
鱼不会将/etc/abc
更改为/etc/fstab
将要执行的操作是模糊匹配您的命令,例如/etc/ft
将与/etc/fstab
匹配,但这仅是因为“ f”和“ t”都以该顺序位于“ fstab”中,并且仅当这是唯一可能的匹配时。
/etc/abc
不会发生这种情况,因为这与/etc/fstab
不匹配。
由于过去的某个时候,您可能输入了ls / etc / fstab。
在这种情况下,不会考虑历史记录。它实际上仅将历史记录用于自动提示-您输入内容的灰色继续,但这仅会进行前缀匹配。
有没有办法让鱼把它关掉,所以它永远不能代替我写的东西?
鱼没有提供更改此行为的选项。
下一个发布的鱼(3.2版)将提供“撤消”功能(默认情况下绑定到ctrl + z),因此您可以通过按此键来撤消任何匹配项。
这仅仅是鱼的自动完成的无名之物吗?
模糊匹配。