Fish 是一个很棒的 shell(最好的?),但它的完成界面有一个我个人不喜欢并且想禁用的特殊怪癖。教程中用这句话来表达:
再次点击选项卡以循环浏览各种可能性。
这意味着,在按 Tab 键完成最长公共前缀(行为 A)并显示更多条目的菜单后,如果再次按 Tab 键,您将开始循环浏览条目(行为 B)。
是否有办法禁用 Tab 键的行为 B,或将其绑定到不同的键,同时保留行为 A?
答案1
在fish shell中,tab将完成公共前缀,除非公共前缀为空,在这种情况下它将启动寻呼机。此特定行为是不可配置的。
寻呼机有多种内部导航方式:
- 使用 tab 切换下一个,shift-tab 切换上一个
- 使用箭头键沿基本方向移动
- 按 control-S 显示搜索字段以进行进一步过滤
- Escape 取消,让您回到触发寻呼机之前
如果您改变主意,退出(通过cancel
绑定)可以让您无需退格。
可以替换选项卡的默认行为。例如,如果寻呼机可见,则选项卡不执行任何操作:
bind \t 'if not status -P ; commandline -f complete; end'
这表示“如果未显示寻呼机,则执行‘完整’readline 功能”。