在bash中,mplayer和imagemagick的“convert”等可执行文件在其命令行参数上具有很酷的自动完成功能。例如,如果我输入
mplayer <tab><tab>
在我的一个视频文件夹中,然后mplayer将列出该文件夹中的所有媒体文件,并且只列出媒体文件。
同样,如果我输入
convert -<tab><tab>
然后我会看到转换脚本的所有可能选项,这很棒。
我的问题是如何使用bash,ruby或python脚本实现类似的功能?
答案 0 :(得分:33)
这是BASH智能完成的一个例子。基本描述为here,编写自己的扩展程序的指南为here,另一个(基于Debian的)指南为here。这是complete
命令的fuller featured introduction(促进此行为的命令)。
编辑:修复死链接
答案 1 :(得分:3)
bash中的此功能由bash-completion提供,zsh中包含类似的功能。如果您想为这些工具之一当前不支持的某些程序添加支持,您需要为它们编写自己的扩展。
答案 2 :(得分:2)
在接受的答案中编写自己的扩展程序的链接已经死亡。从http://web.archive.org/web/20090409201619/http://ifacethoughts.net/2009/04/06/extending-bash-auto-completion/
引用此处Bash为您提供了一种指定关键字并将其用于的方法 为您的应用程序自动完成命令行参数。我用vim 作为维基,任务管理员和联系人。 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.
Bash可编程完成是通过采购来完成的 / etc / bash-completion脚本。该脚本让我们添加我们的 自动完成脚本/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可编程完成系统。