我有与此类似的问题,但不同:我希望 bash使用如果可能的话,在自动完成中使用 glob 扩展。例如,我想
$ ls *2.<TAB>
给我:
$ ls mydoc2.
mydoc2.pdf mydoc2.tex mydoc2.txt
我经常遇到这种情况。在上面的例子中,我使用了短前缀“mydoc”,但实际前缀通常很长。这可能吗?
我理解*2.*
会用 进行扩展C-x*
,但这是一个不同的功能,不适合这种情况(因为我需要从与 glob 匹配的文件列表中选择一个文件)。
答案1
模拟此自动完成行为的最佳方法是启用show-all-if-ambiguous
阅读行变量(如果找到多个匹配项,则显示可能的完成),然后使用glob-complete-word
阅读行命令(执行 glob 路径名扩展)。
# 1: Enable `show-all-if-ambiguous` in ~/.inputrc
set show-all-if-ambiguous on
如有歧义则显示全部:这会改变补全功能的默认行为。如果设置为“on”,则具有多个可能补全的单词会导致立即列出匹配项,而不是响铃。默认值为“off”。
# 2a: Check to ensure that `glob-complete-word` is bound.
$ bind -q "glob-complete-word"
glob-complete-word can be invoked via "\eg".
# 2b: If unbound, bind `glob-complete-word` to "\eg".
$ bind '"\eg":glob-complete-word'
完整单词 (Mg):point 之前的单词被视为路径名扩展的模式,并隐式附加星号。此模式用于生成匹配文件名的列表,以供可能的补全。
# 3: Trigger the autocompletion with <META-g> or <ESC-g>
# META => alt (Windows/Linux)
# META => option (OSX)
$ ls *2.<META-g>
# possible completions will be listed (show-all-if-ambiguous)
mydoc2.pdf mydoc2.tex mydoc2.txt
# glob pathname completion will be performed (glob-complete-word)
$ ls mydoc2.