gpt4 book ai didi

bash - 可以更改 fish shell 中的选项卡完成行为吗?

转载 作者:行者123 更新时间:2023-11-29 08:53:13 36 4
gpt4 key购买 nike

更新 :此投诉与旧版本的 fish 有关 - 请参阅下面一位 fish 开发人员的评论,该评论描述了使该投诉无效的 fish 寻呼机行为的惊人改进。

fish shell 很酷——但是我讨厌制表符完成的功能之一。

我经常 - 几乎就像一个紧张的嘀嗒声 - 在更改目录时键入路径时会点击 {tab}{tab}。这让我可以使用 {tab} 来检查某些路径的内容,同时解决我当前击键允许解决的大部分路径消歧问题。这提供了一种很好的方法,可以快速发现到达文件系统中某个位置的最快组合键,而无需过多思考或不必事先知道各个目录的内容。

另一方面,Fish 以我认为非常烦人的方式解释 {tab} {tab}。第一个 {tab} 列出了可能的补全,这很好。按下下一个选项卡,fish 选择列表中的第一个补全,并用完整的第一个补全替换当前在行上输入的路径的最后部分——无论消歧状态如何。后续选项卡循环显示下一个可能性。它类似于 windows 命令 shell 的功能。

这比正常的 bash 行为要糟糕得多......

考虑一个深度嵌套的目录结构 foo/bar/baz/a/b/c/

其中一些 foo、bar、baz 是空目录。 Bash tab 补全让我输入 cd foo/{tab}{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 执行此操作,您需要在命令序列中的正确时间使用“/”——这需要心理反馈
  • 在大目录中发现消歧序列要困难得多
  • 通常要求您在点击 Tab 之前“小心”,这会降低您点击它的频率并降低其实用性...

  • Somone 请告诉我,有一种方法可以改变 fish 的行为,使其更像 bash …… fish 很酷,但这种行为无法使用——如果没有办法改变这一点,我将不得不回到 bash 中……

    最佳答案

    我赞扬你写了这篇详细而周到的帖子,它应该得到同样详细和周到的回应!

    选项卡完成行为已在fish top-of-tree(尚未发布)中重写,并被称为“新寻呼机”。你可以看到设计目标和讨论here .我在此回复的底部放了一张便条,说明如何获得它。

    shell 是个人的,就像任何个人的东西一样,合理化和辩解一文不值:你要么喜欢,要么不喜欢,我们甚至可能没有意识到影响我们感受的因素。所以我真正能说的就是尝试一下,看看你的感受,然后(请)报告。

    我贴了一个 short little screencast YouTube 上的新寻呼机。需要注意的事情:1. 只需输入更多内容即可关闭菜单,2. 它逐渐“展开”(需要几个选项卡才能完全可见),即使有大量完成,也永远不会模态地接管您的屏幕,并且是易于搜索和导航,并且 3.escape 将始终关闭它并将您的命令行恢复为您输入的内容。

    让我逐一分析您的疑虑:

    “我必须按未知次数的 Tab 键才能获得我想要的值” .使用新的寻呼机,所选项目会在菜单中突出显示。这听起来微不足道,但我个人认为这有很大的不同:点击 Tab 的额外次数是已知的,并且由于您的手指在 Tab 上,因此只点击几次通常比输入额外的字母更容易。您还可以使用箭头键进行导航。

    “我无法将条目上下文恢复为到目前为止我实际输入的字母” .使用新的寻呼机,转义键就是这样做的。很容易按下,因为 Esc 就在选项卡的正上方,你的手指所在的位置。

    “如果这个目录中有一大堆以 ba 开头的东西怎么办——我完全搞砸了 会发生什么”。 bash 和 old-pager-fish 都不能很好地处理大量的完成。 fish 会让你进入这个模态分页环境,而 bash 用模态“显示所有 1002 种可能性?(y 或 n)”对话框打破你的流程,迫使你停止你正在做的事情并点击“n”。

    我想你会喜欢新的寻呼机如何处理这个的。最初,您会得到一个简短的菜单,最多可填充提示下方的五行(不是上方,也不是替换)。这个菜单是非模态的,可以通过输入更多或点击退出来关闭。如果你再次点击 Tab,菜单会增长以显示更多的完成,但仍然是非模态的。永远不会有不和谐的过渡。

    “它不允许使用制表符来完成嵌套路径”抱歉,我不确定您的意思。 bash 和fish 都在tab 完成目录时附加一个/。

    “在大目录中发现消歧序列要困难得多”使用新的寻呼机,您可以点击转义键,输入更多内容,然后再次使用 Tab 键。或者您可以搜索菜单:将焦点放在菜单中并输入一些内容,然后进行过滤。请参阅上面的截屏视频。

    “通常要求您在点击 Tab 之前‘小心’,这会降低您点击它的频率并降低其效用”一个非常有效的观点,新的寻呼机以几种方式解决了这一点。首先,它使用了渐进式披露的概念,这意味着输出大量数据需要“工作”。其次,它永远不会像旧的模态寻呼机那样“接管你的屏幕”。最后,您可以按 Esc 键返回到您输入的内容,并且由于寻呼机出现在提示下方,因此它不会像 bash 那样在回滚中留下小垃圾。

    如果你使用自制软件,你可以通过 brew install fish --HEAD 从 master 安装.还有nightly builds for Linux .最后,请随时在 https://github.com/fish-shell/fish-shell/issues 打开一个问题有任何改进的想法。

    关于bash - 可以更改 fish shell 中的选项卡完成行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204622/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com