有关我的系统的详细信息:我正在从Asus笔记本电脑上安装的Windows 8.1在Oracle Virtual Box 4.3.6上运行Ubuntu 12.04.4 LTS。我正在使用bash_completion 1.3版发行版(我是从/ etc / bash_completion文件中的注释中获得的)
我以为bash总是会在命令后自动完成文件和目录的完成。但是在Google搜索并阅读了有关bash_completion的更多信息之后,我意识到对于不同的命令来说这是不同的。但是在使用替代方法来调用时,bash的此自动完成功能面临一个问题emacs -nw
。
我已经ee
在~/.bash_aliases
文件中定义了一个函数。我知道这不是别名,但是我只是使用一个函数来做别名会做的事情:
function ee () {
emacs -nw "$@"
}
export -f ee
我以为tab
如果键入部分文件名,我仍然可以使用ee函数的补全功能。这似乎不起作用。而如果我键入emacs -nw
后跟部分文件名,则制表符补全效果会很好。我真的不明白这里缺少什么。我检查了命令的输出complete -p
,我得到两个以下emacs
和ee
:
eakangk@eakan-u-vbox:~$ complete -p | grep 'ee'
complete -F _filedir_xspec ee
eakangk@eakan-u-vbox:~$ complete -p | grep 'emacs'
complete -F _filedir_xspec emacs
这是否意味着在尝试自动完成时,两个命令都应该给我相同的行为?编辑:发布问题时我没有ee
在/etc/bash_completion
文件中看到该行。但是现在我知道它在那里。但是/ etc / bash_completion文件具有以下几行:
complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
我在这里做错了什么?
这与bash-completion软件包有关。它为emacs设置了一些自定义完成,显然,当命令名称不同时,相同的完成会失败。
我自己不使用bash-completion,但是我快速查看了源代码,发现了这一点:
_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
可能用来说“对于这些命令,请不要完成以.gif,.mp3,.avi等结尾的文件”,而且我猜想如果ee命令没有_install_xspec行,那么它就不会完成任何操作。
查看_install_xspec函数,它只是将这些值放在_xspecs
使用命令名作为键命名的关联数组中,因此,如果运行_xspecs[ee]=${_xspecs[emacs]}
,则ee命令应获得与emacs相同的补全。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句