Hoo*_*ked 13 bash autocomplete wildcards
如果我有包含文件的目录
foo.bar.a.cat
foo.bar.a.hat
Run Code Online (Sandbox Code Playgroud)
然后我输入ls f+ TABbash shell 自动完成到ls foo.bar.a.. 如果我输入ls *bar*+TAB我希望它自动完成到*bar*.a.. 这可能吗?
这看起来类似于问题
但建议的答案,“它对我来说是开箱即用的”,却没有。我也试过TAB TAB,没有效果。命令``bash --version givesGNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)`。
dem*_*ure 17
你想要:
ALT* 对于“插入所有完成”
有了这个,包含文件名 'aa ab ac ad'
ls a*后跟的目录alt + *将完成ls aa ab ac ad
关于绑定的手册页条目:
插入完成 (M-*)
在可能的补全生成的点之前插入文本的所有补全。
在某些系统上,上述内容不适用于通配符,以下内容对我来说确实适用于此类系统:
ctrlx, *(二冲程组合)
示例:我填充了一个目录:
touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}
Run Code Online (Sandbox Code Playgroud)
然后我ls *100*跟着ctrl + x, *,这把我的阅读线变成:
ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f
Run Code Online (Sandbox Code Playgroud)
用于绑定的手册页条目:
glob-expand-word (Cx *)
point 之前的单词被视为路径名扩展的模式,并插入匹配的文件名列表,替换该单词。如果提供了数字参数,则在路径名扩展之前附加“*”。
尝试将其添加到 ~/.inputrc 中:
set show-all-if-ambiguous on
Run Code Online (Sandbox Code Playgroud)
show-all-if-ambiguous 使按 Tab 键一次(而不是两次)列出所有完成。它还使第一个选项卡按下插入 glob 表达式的共享前缀。
$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1 1.0.2
$ echo 1.0.
Run Code Online (Sandbox Code Playgroud)
glob-complete-word (\eg) 也会完成*0(没有*结尾)到1.0.. 它还完成例如/System/Library/Launch*/*Findeto /System/Library/LaunchAgents/com.apple.Finder.plist。
如果您想在上面的示例中转换*为1.0.1 1.0.2,请使用插入完成 (\e*) 或 glob-expand-word (\Cx*)。
小智 6
此问题是由“bash-completion”包中的错误引起的。
当没有安装软件包时,bash 会默认补全,这是一个非常好的通用文件名补全引擎。
“bash-completion”包应该查看该行的其余部分,并对它生成的列表保持“智能”。但是,它无法成功复制“glob”扩展。
就我个人而言,我认为该软件包过于努力,最终只能由“最愚蠢的普通用户”使用。
不过,在删除它之前,您可能需要检查文件“/usr/share/bash-completion/bash_completion”的顶部,以获取对 .bashrc 的有用添加,以便对内置 bash 完成进行“总体调整”。
顺便说一句:它有一百多个记录的错误...... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion