Bash 部分全局扩展

Bash 部分全局扩展

我有与此类似的问题,但不同:我希望 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.  

相关内容