- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 :此投诉与旧版本的 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 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/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!