我正在尝试编写一个小型命令启动器应用程序,并希望在我自己的完成系统中使用bash的选项卡完成.我已经能够获得一般命令的完成列表compgen -abck.
但是,我还希望获得特定命令的完成:例如,输入git p应显示git命令的完成.
我有什么方法可以compgen用来做这个吗?如果没有,还有其他方法可以通过编程方式获得完成列表吗?
[编辑:澄清一点,我不是要为 bash 提供完成 - 我的应用程序是一个GUI命令启动器.我只想在我自己的应用程序中使用bash的现有完成.
几个月前,我写了一篇博客文章,详细介绍了如何在标准的Python交互式解释器中实现tab-completion - 这个功能我曾经认为只在IPython中可用.由于IPython unicode问题,我有时不得不切换到标准解释器,因此我发现它非常方便.
最近我在OS X中做了一些工作.令我不满的是,脚本似乎不适用于OS X的终端应用程序.我希望你们中的一些有OS X经验的人可以帮助我解决问题,这样它也可以在终端中运行.
我正在复制下面的代码
import atexit
import os.path
try:
import readline
except ImportError:
pass
else:
import rlcompleter
class IrlCompleter(rlcompleter.Completer):
"""
This class enables a "tab" insertion if there's no text for
completion.
The default "tab" is four spaces. You can initialize with '\t' as
the tab if you wish to use a genuine tab.
"""
def __init__(self, tab=' '):
self.tab = tab
rlcompleter.Completer.__init__(self)
def complete(self, text, state):
if text == '':
readline.insert_text(self.tab)
return …Run Code Online (Sandbox Code Playgroud) 我们都知道MATLAB提供标签完成了用作像MATLAB函数参数的文件名importdata,imread.我们如何为我们创建的功能做到这一点?
编辑:

显示当前目录中的文件和文件夹.
我正在试图弄清楚如何在C++应用程序中实现子命令的选项卡完成.我希望它的功能与Git的标签完成非常相似.我正在通过Git的来源徘徊,但它并没有向我跳出来.
我已经搜索了实现制表符完成的方法并且没有找到直接的答案,所以我猜它可能不一定是每个应用程序必须实现的功能.制表符完成是应用程序正在执行的特定shell的功能吗?有关使我的应用程序支持制表符完成(尤其是在C++中)需要了解的基础知识是什么?
有没有人能够使用fish shell为AWS CLI设置自动完成功能?AWS文档仅提供bash,tcsh和zsh的指南.
Bash导出变量COMP_LINE,COMP_POINT并由亚马逊提供的aws_completer脚本使用.有没有鱼的等价物?我是鱼壳的新手,我试试看.
我创建了一个自定义类,其中文件由构造函数和方法加载(路径作为输入提供),例如:
Classdeclaration:
classdef Foo > handle
methods
function o = Foo(file), end
function bar(o,file), end
end
end
Run Code Online (Sandbox Code Playgroud)
TC.xml文件:
<binding name="Foo" ctype="FILE"/>
<binding name="bar" ctype="MCOSCLASS FILE"/>
Run Code Online (Sandbox Code Playgroud)
Matlab命令提示符:
s = Foo('+ Tab列出可用文件.
s.bar('+ Tab有效
但问题是Tab完成不仅限于Foo类.改变这TC.xsd一点的诀窍并不是很不幸.到目前为止,Yair Altman帮助我实现了这一点.再次感谢你.
整个过程可以在这里找到:
我正在运行Ubuntu 13.10和fish 2.1.0.我想自己写一个Python脚本来从命令行执行一些任务.该脚本将需要命令行参数.
如何编写我的脚本,以便fish可以请求并获取给定参数的可能值.潜在价值清单是动态的.也就是说,它将以编程方式确定(例如,符合某些标准的文件夹名称列表).
我的目标最终结果如下:
user@machine ~> myprog argument=fol<TAB>
folder1 folder2 folder3
Run Code Online (Sandbox Code Playgroud)
myprog我的脚本文件在哪里,argument参数名称folder1等是我脚本中某些函数生成的有效值.
这是可能的,如果是这样的话怎么样?
在zsh中,我有一个函数调用g,其行为如下:
git statusgit $@我希望选项卡完成g与完全相同git.我可以实现这一点alias g=git,但这不允许我status默认调用(上面的第一点).
我该如何委托完成git?
在bash中,我只是complete -F _git g重复使用git的完成功能.使用zsh,git的完成看起来要复杂得多,我无法找到类似的解决方案.
我猜在zsh中有一些函数说"假装我输入命令[x],你会把它完成什么?".如果我知道那是什么,那么使用函数委托给它应该很简单.但是我在手册中找不到这样的功能.
Bash选项卡完成在第一次完成后添加额外空间,如果compeletion目标是多级文件夹中的文件,则停止进一步完成.
例如,我在路径〜/ Documents/foo/bar.txt中有一个文件,我想列出它.输入时我遇到以下问题
a@b:~$ls Docu <TAB>
Run Code Online (Sandbox Code Playgroud)
我明白了
a@b:~$ls Documents |(<-this is the cursor, so there is an extra space afer Documents)
Run Code Online (Sandbox Code Playgroud)
所以我无法进一步完成标签.我必须退格以删除额外的空间.
通常我想得到:
a@b:~$ls Docu <TAB>
a@b:~$ls Documents/ <TAB>
a@b:~$ls Documents/foo/ <TAB>
a@b:~$ls Documents/foo/bar.txt
Run Code Online (Sandbox Code Playgroud) 当我创建python3 virtual-env时,tab-completion(默认使用python3)不再起作用.这是为什么?
virtualenv -p /usr/bin/python3 --system-site-packages ~/venv3.site
. ~/venv3.site/bin/activate
Run Code Online (Sandbox Code Playgroud)
没有--system-site-packages它有同样的问题:没有制表完成.如果我在python3没有激活任何虚拟环境的情况下运行,则选项卡完成工作.
tab-completion ×10
bash ×2
fish ×2
matlab ×2
python ×2
shell ×2
autocomplete ×1
aws-cli ×1
c++ ×1
class ×1
filenames ×1
interpreter ×1
macos ×1
python-3.x ×1
virtualenv ×1
zsh ×1