我找不到关于Readline选项show-all-if-ambiguous
和show-all-if-unmodified
之间的区别的明确解释,以及它们是影响不同的东西还是互斥的。关于这个问题的官方文件很少。
使用手册页中的描述
如果未修改则显示所有
这改变了完成函数的默认行为,其方式类似于如果不明确则显示全部。如果设置为"on",则具有一个以上可能完成而没有任何可能部分完成的单词(可能完成不共享公共前缀)会导致匹配项立即列出,而不是敲钟。默认值为"off"。
这意味着,如果可以进行任何部分补全,那么它们将被填充,并且不会显示所有补全
如果没有部分完成,则显示所有完成。
如果不明确则显示所有
这将更改完成函数的默认行为。如果设置为"on",则具有多个可能完成词的单词会立即列出匹配项,而不是敲钟。默认值为"off"。
这意味着单词将部分完成,直到出现歧义并且将在一步中打印所有完成。
示例
假设我们有一个文件abcd.txt
和abce.txt
使用
显示所有未修改的
键入
$ls a<tab>
将显示
$ls abc
再次按下标签(因为没有部分完成)将导致
$ls abc
abcd.txt abce.txt
$ls abc
如果不明确,使用
显示所有
键入
ls a<tab>
将显示
$ls a
abcd.txt abce.txt
$ls abc
因此,在一个步骤中执行这两个操作。
另请注意,如果不明确则显示全部覆盖未修改则显示全部,因此如果两者都设置为启用,则行为将与前者相同。
默认情况下,如果存在多个可能的完成,readline将不会打印任何可能的完成。此外,如果所有可能的完成都共享一个公共前缀,则插入该公共前缀。
两个选项讨论了更改readline的行为:
-
show-all-if-ambiguous
将导致readline在第一次按下选项卡后打印可能的补全,即使有多个补全 -
show-all-if-unmodified
将执行相同的操作,除非所有完成符共享一个公共前缀
一个例子:
假设我们有两个可能的完成匹配,它们共享一个公共前缀。例如,在一个空目录中,运行:
touch ___1 ___2
现在,键入:Space
如果我们打开show-all-if-ambiguous
,屏幕将显示为:
$ :
___1 ___2
$ : ___
但如果我们只打开show-all-if-unmodified
,屏幕将看起来像:
$ : ___
请注意,在这一点上,按下选项卡将触发显示任何一种情况下可能的完成。然而,如果上面的两个选项都没有打开,就不会发生任何事情,我们必须再次按下选项卡才能获得列表。