自动完成命令行参数
在bash中,诸如mplayer和imagemagick的“convert”之类的可执行文件在其命令行参数上具有很酷的自动完成功能。举例来说,如果我输入自动完成命令行参数
mplayer <tab><tab>
在我的视频文件夹之一,然后mplayer的将列出位于该文件夹中的所有媒体文件,只有媒体文件。
同样,如果我输入
convert -<tab><tab>
然后我会看到转换脚本,这是伟大的所有可能的选项。
我的问题是如何使用bash,ruby或python脚本实现类似的功能?
这是BASH智能完成的一个例子。基本描述是here,编写自己的扩展的指南是here,另一个(基于Debian的)指南是here。这里是fuller featured introduction到complete
命令(促进这种行为的命令)。
编辑:固定死链接
在接受的答案中编写自己的扩展的链接已经失效。从http://web.archive.org/web/20090409201619/http://ifacethoughts.net/2009/04/06/extending-bash-auto-completion/
猛砸引用在这里为您提供指定关键字,并利用这些 自动完成命令行参数为您的应用程序的方式。我使用vim 作为wiki,任务管理员和联系人。 vim helptags系统让 我索引内容而不是搜索它,并且速度 显示它。我想添加的一个功能是从vim外部访问这些标签 。
这可以通过直接的方式来完成:
$ vim -t tagname
这直接带我去使用这个标签标示的具体内容。但是,如果我可以为标签提供 自动完成功能,这将会更加高效。
我首先为vim命令行定义了一个Bash函数。我加了 下面的代码到我的.bashrc文件:
function get { vim -t $1 } Now I can use get tagname command to get to the content.
猛砸可编程完成是通过获取 的/ etc/bash的完成脚本来完成。该脚本让我们添加我们的 自动完成脚本/etc/bash-completion.d/目录,并在调用它时执行 。所以我添加了一个名为get的脚本文件,其代码如下: 。
_get() { local cur COMPREPLY=() #Variable to hold the current word cur="${COMP_WORDS[COMP_CWORD]}" #Build a list of our keywords for auto-completion using #the tags file local tags=$(for t in `cat /home/anadgouda/wiki/tags | \ awk '{print $1}'`; do echo ${t}; done) #Generate possible matches and store them in the #array variable COMPREPLY COMPREPLY=($(compgen -W "${tags}" $cur)) } #Assign the auto-completion function _get for our command get. complete -F _get get Once the /etc/bash-completion is sourced, you will get auto-completion for the tags when you use the get command.
随着我的wiki我用它为所有的文件工作和 倍的代码了。我也使用从我的代码创建的标签文件。索引系统允许我记住上下文而不是文件名 和目录。
您可以针对您使用的任何工具调整此系统。所有你需要的 要做的是获得你的命令的关键字列表,并将其提供给Bash可编程完成系统 。
谢谢!我只是在接受的答案中修复了这些链接。 – 2018-03-03 11:01:07