自动完成命令行参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动完成命令行参数相关的知识,希望对你有一定的参考价值。
在bash中,mplayer和imagemagick的“convert”等可执行文件在其命令行参数上具有很酷的自动完成功能。例如,如果我输入
mplayer <tab><tab>
在我的一个视频文件夹中,然后mplayer将列出位于该文件夹中的所有媒体文件,并且仅列出媒体文件。
同样,如果我输入
convert -<tab><tab>
然后我将看到转换脚本的所有可能选项,这很棒。
我的问题是如何使用bash,ruby或python脚本实现类似的功能?
这是BASH智能完成的一个例子。基本描述是here,编写自己的扩展的指南是here,另一个(基于Debian的)指南是here。这里是fuller featured introduction命令的complete
(促进此行为的命令)。
编辑:修复死链接
bash中的此功能由bash-completion提供,zsh中包含类似的功能。如果要添加对某些当前不支持的程序的支持,则需要为它们编写自己的扩展。
在接受的答案中编写自己的扩展程序的链接已经消失。从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可编程完成系统。
以上是关于自动完成命令行参数的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?
[AndroidStudio]_[初级]_[配置自动完成的代码片段]
[AndroidStudio]_[初级]_[配置自动完成的代码片段]