自动完成命令行参数

时间:2010-09-11 10:41:19

标签: command-line autocomplete command-line-arguments

在bash中,mplayer和imagemagick的“convert”等可执行文件在其命令行参数上具有很酷的自动完成功能。例如,如果我输入

mplayer <tab><tab>

在我的一个视频文件夹中,然后mplayer将列出该文件夹中的所有媒体文件,并且只列出媒体文件。

同样,如果我输入

convert -<tab><tab>

然后我会看到转换脚本的所有可能选项,这很棒。

我的问题是如何使用bash,ruby或python脚本实现类似的功能?

3 个答案:

答案 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可编程完成系统。