我无法找到Readline选项show-all-if-ambiguous
和show-all-if-unmodified
之间差异的明确解释,以及它们是否会影响不同的事物或是否相互排斥。关于这个问题的官方文件很少。
答案 0 :(得分:4)
使用man page
中的说明显示-全如果未修饰强>
这以类似于show-all-if-ambiguous的方式改变了完成函数的默认行为。如果设置为“开启”,则具有多个可能完成而没有任何可能的部分完成的单词(可能的完成不共享公共前缀)会导致匹配立即列出而不是响铃钟。默认值为“off”。
这意味着如果可以进行任何部分完成,那么它们将被填写并且不会显示所有完成。
如果没有部分完成,则显示所有完成。
显示-全如果歧义强>
这会改变完成功能的默认行为。如果设置为“on”,则具有多个可能完成的单词会立即列出匹配而不是响铃。默认值为“off”。
这意味着该单词将部分完成,直到存在歧义 AND 将一步打印所有完成。
假设我们有文件abcd.txt
和abce.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 来获取列表。