【发布时间】:2015-01-28 23:50:04
【问题描述】:
更新:此投诉与旧版本的 fish 相关 - 请参阅以下来自 fish 开发人员的评论,该评论描述了对 fish pager 行为的惊人改进,从而消除了此投诉。
鱼壳很酷——但是我讨厌制表符补全的功能之一。
我经常 - 几乎就像一个紧张的蜱虫 - 在更改目录时输入路径时会点击 {tab}{tab}。这让我可以使用 {tab} 来检查某些路径的内容,同时解决我当前击键允许解决的大部分路径消歧问题。这提供了一种很好的方法,可以快速发现到达文件系统中某个位置的最快组合键,而无需经过深思熟虑或不必提前知道各个目录的内容。
另一方面,Fish 以我认为非常烦人的方式解释 {tab} {tab}。第一个 {tab} 列出了可能的完成,这很棒。按下下一个选项卡 fish 选择列表中的第一个补全并将当前在行中输入的路径的最后部分替换为完整的第一个补全——无论消歧状态如何。随后的选项卡循环显示下一个可能性。它类似于 windows 命令 shell 所做的。
这比正常的 bash 行为要糟糕得多......
考虑一个深度嵌套的目录结构 foo/bar/baz/a/b/c/
其中一些 foo、bar、baz 是空目录。 Bash 制表符补全让我可以输入 cd foo/{tab}{tab}{tab}{tab}{tab}{tab} ——无需考虑我按了多少次制表符,也无需考虑效果在我的命令行条目的当前状态上点击选项卡之前。
在正常情况下,所有这些目录都不会是空的——但上面的方法仍然可以非常快速地发现我需要输入的最少字符数才能进入某个深度嵌套的路径。
使用 bash 行为: cd some/unknown/dir/{tab}{tab} 保证
(1) 我看到目录 dir/ 的内容 (2) 到目前为止,从我的命令中可以明确表达的大部分内容都已完成,但仅此而已。
点击上面的两个标签后,我可能会看到如下内容:
abc123 酒吧123 baz123 bcd123 mnop123
可以进行以下操作:
a{TAB}{TAB}(给我 abc123,如果这是一个目录,则列出其内容)
m{tab}{tab}(给我 mnop123,如果它的目录列出了它的内容)
假设我想到达路径 bcd123: b -- 显示我打字太快了,现在只显示了 3 个选项 我很容易得出结论,我只需要按“c”就可以消除我的目标的歧义
b{tab}{tab}c{tab}{tab}(获取我想要的路径,如果是目录,则列出 bcd123 的内容)
fish 的模型更糟糕。 b{tab}{tab} 将完成到 bar123,我必须点击 tab 未知次数才能获得我想要的值,此外,我无法将条目上下文恢复为只有我的字母'到目前为止,我实际上已经输入了(除了多次按退格键)。如果在这个目录中碰巧有一大堆以 ba 开头的东西——我完全搞砸了会发生什么......
一般来说fish的模型更差:
- 它不允许使用制表符来完成嵌套路径 - 要对鱼执行此操作,您需要在命令序列中的正确时间使用“/” - 这需要心理反馈
- 在大型目录中更难发现消歧序列
- 通常要求您在点击标签之前“小心”,这会降低您点击它的频率并降低其实用性...
请告诉我有一种方法可以在这里改变 fish 的行为,使其更像 bash ...fish 很酷,但这种行为无法使用——如果没有办法改变它,我将不得不回到 bash ...
【问题讨论】:
-
听起来你想在github.com/fish-shell/fish-shell提出问题