show-all-if-ambiguous vs show-all-if-un -ified?

时间:2017-02-12 19:46:02

标签: bash readline tab-completion

我无法找到Readline选项show-all-if-ambiguousshow-all-if-unmodified之间差异的明确解释,以及它们是否会影响不同的事物或是否相互排斥。关于这个问题的官方文件很少。

2 个答案:

答案 0 :(得分:4)

使用man page

中的说明
  

显示-全如果未修饰

     

这以类似于show-all-if-ambiguous的方式改变了完成函数的默认行为。如果设置为“开启”,则具有多个可能完成而没有任何可能的部分完成的单词(可能的完成不共享公共前缀)会导致匹配立即列出而不是响铃钟。默认值为“off”。

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

  

显示-全如果歧义

     

这会改变完成功能的默认行为。如果设置为“on”,则具有多个可能完成的单词会立即列出匹配而不是响铃。默认值为“off”。

这意味着该单词将部分完成,直到存在歧义 AND 将一步打印所有完成。

实施例

假设我们有文件abcd.txtabce.txt

使用
显示-全如果未修饰

输入

$ls a<tab>

将显示

$ls abc

并再次按Tab键(因为没有部分完成)将导致

$ls abc
abcd.txt abce.txt
$ls abc

使用
显示-全如果歧义

输入

ls a<tab>

将显示

$ls a
abcd.txt abce.txt
$ls abc

所以一步完成两个动作。

另请注意, show-all-if-ambiguous 会覆盖 show-all-if-unmodified ,因此如果两者都设置为on,则行为将是前者。

答案 1 :(得分:1)

默认情况下,如果有多个可能的完成,则readline不会打印任何可能的完成。此外,如果所有可能的完成共享一个公共前缀,则插入该公共前缀。

讨论的两个选项改变了readline的行为:

  • show-all-if-ambiguous 会导致readline在第一个 Tab 按下后打印可能的完成次数,即使有多个也是如此。
  • show-all-if-unmodified 也会这样做,除了所有完成共享公共前缀的情况

一个例子:

我们假设我们有两种可能的完成匹配,它们共享一个共同的前缀。例如,在空目录中,运行:

touch ___1 ___2

现在,输入 空格 标签

如果我们启用了 show-all-if-ambiguous ,则屏幕将如下所示:

$ :
___1  ___2
$ : ___

但如果我们只启用 show-all-if-unmodified ,则屏幕将如下所示:

$ : ___

请注意,此点按 Tab 将触发两种情况下可能的完成显示。但是,如果我们没有启用上述选项的 ,则不会发生任何事情,我们将不得不再次按 Tab 来获取列表。