【问题标题】:Auto-complete command line arguments自动完成命令行参数
【发布时间】:2022-01-17 22:31:30
【问题描述】:

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

mplayer <tab><tab>

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

同样,如果我输入

convert -<tab><tab>

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

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

【问题讨论】:

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


    【解决方案1】:

    这是 BASH 智能补全的一个示例。基本描述是here,编写自己的扩展的指南是here,另一个(基于Debian)指南是here。这是fuller featured introductioncomplete 命令(促进这种行为的命令)的fuller featured introduction

    【讨论】:

      【解决方案2】:

      在接受的答案中编写您自己的扩展程序的链接已失效。此处引用http://web.archive.org/web/20090409201619/http://ifacethoughts.net/2009/04/06/extending-bash-auto-completion/

      Bash 为您提供了一种指定关键字的方法,并使用它们 为您的应用程序自动完成命令行参数。我用 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.
      

      Bash 可编程完成是通过采购 /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 可编程补全系统。

      【讨论】:

      • 谢谢!我刚刚修复了已接受答案中的链接。
      【解决方案3】:

      bash 中的此功能由bash-completion 提供,zsh 中包含类似的功能。如果您想为这些工具之一当前不支持的某些程序添加支持,您需要为它们编写自己的扩展。

      【讨论】:

      • 链接已失效。
      【解决方案4】:

      如何在 Ubuntu 上启用 bash 完成

      sudo apt-get install bash-completion
      
      source /etc/profile.d/bash_completion.sh
      
      sudo apt i[TAB]
      

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 2019-04-15
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多