我想从我的自定义补全中获得以下行为
给定的
$ mkdir foo
$ touch foo faz/bar faz/baz
我想要这个
$ foo -u <tab><tab> =>
foo faz/
$ foo -u fa<tab><tab> =>
foo -u faz/
$ foo -u faz/<tab><tab> =>
bar baz
我假设compgen -f f
会输出foo faz/
,但它输出的是foo faz
,这对我没有多大帮助。
我需要对输出进行后处理吗?或者有没有什么神奇的选项组合可以让compgen发挥作用?
发布于 2014-11-14 18:57:45
这对我很有效:
_my_completion() {
compopt -o nospace
COMPREPLY=( $(compgen -S "/" -d "${COMP_WORDS[$COMP_CWORD]}") )
}
complete -F _my_completion foo
发布于 2014-11-28 15:29:08
如果您希望在目录完成后能够继续使用tab;以下是完整的解决方案:
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -S "/" -d -- ${cur}) );
compopt -o nospace;
首先,在答案后面加上一个斜杠。然后运行compopt -o nospace
命令删除尾随空格。现在,如果您的目录中只有foo/bar
,那么两个选项卡就足以输入它们!
https://stackoverflow.com/questions/12933362
复制相似问题