Tab 自动完成功能在命令“内部”不起作用,也就是说,对于选项来说。
例如,考虑该命令的帮助文件mousepad
:
lucho@lucho-XPS15:~$ mousepad --help
Usage:
mousepad [OPTION…] [FILES...]
Help Options:
-h, --help Show help options
--help-all Show all help options
--help-gtk Show GTK+ Options
Application Options:
--disable-server Do not register with the D-BUS session message bus
-q, --quit Quit a running Mousepad instance
-v, --version Print version information and exit
--display=DISPLAY X display to use
如果我输入mousepad --disable
然后按自动完成键,什么也不会发生。
为什么会这样?有没有办法启用这个“广泛的”标签自动完成功能?
答案1
为什么会这样呢?
因为 bash 完成函数通常不包含完成中的参数。
有没有办法可以启用这个“广泛的”选项卡自动完成功能?
由此U&L 帖子:
对于某些命令,bash 将使用参数调用该命令
--help
并解析输出。此类命令可以使用 complete 内置函数注册,例如complete -F _longopt ls
。_longopt
实际上是一个完成生成函数,它恰好解析命令的输出而不是使用固定列表。(还有其他更专业的完成函数可以解析命令的输出以生成可能的完成;查看/etc/bash_completion.d/*
示例。)
所以:
$ complete -F _longopt mousepad
$ mousepad --
--disable-server --display= --help --help-all --help-gtk --quit --version