如果不明确则显示全部与如果未修改则显示全部



我找不到关于Readline选项show-all-if-ambiguousshow-all-if-unmodified之间的区别的明确解释,以及它们是影响不同的东西还是互斥的。关于这个问题的官方文件很少。

使用手册页中的描述

如果未修改则显示所有

这改变了完成函数的默认行为,其方式类似于如果不明确则显示全部。如果设置为"on",则具有一个以上可能完成而没有任何可能部分完成的单词(可能完成不共享公共前缀)会导致匹配项立即列出,而不是敲钟。默认值为"off"。

这意味着,如果可以进行任何部分补全,那么它们将被填充,并且不会显示所有补全
如果没有部分完成,则显示所有完成。

如果不明确则显示所有

这将更改完成函数的默认行为。如果设置为"on",则具有多个可能完成词的单词会立即列出匹配项,而不是敲钟。默认值为"off"。

这意味着单词将部分完成,直到出现歧义并且将在一步中打印所有完成。


示例

假设我们有一个文件abcd.txtabce.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,屏幕将看起来像:

$ : ___

请注意,在这一点上,按下选项卡将触发显示任何一种情况下可能的完成。然而,如果上面的两个选项都没有打开,就不会发生任何事情,我们必须再次按下选项卡才能获得列表。

最新更新