虽然chepner已经得出正确的结论,安装是不可避免的,但我会建议看看其他项目如何解决这个问题。
的特拉维斯CI 特拉维斯宝石提供首次执行安装完工。它节省完成脚本〜/ .travis/travis.sh然后追加以下至的.bashrc:
# added by travis gem
[ -f ~/.travis/travis.sh ] && source ~/.travis/travis.sh
前面的例子是有点侵入。有关更自由放任的方法,请参阅Python的pip
(与Ruby的gem
类似)。它有一个隐藏的完成选项,它向stdout输出一个bash或zsh完成脚本。由用户决定如何获取它。
pip completion --bash
输出以下:
# pip bash completion start
_pip_completion()
{
COMPREPLY=($(COMP_WORDS="${COMP_WORDS[*]}" \
COMP_CWORD=$COMP_CWORD \
PIP_AUTO_COMPLETE=1 $1))
}
complete -o default -F _pip_completion pip
# pip bash completion end
在一个有些不同,但是相关说明...如果你看一下上述脚本完成,你会发现它做的东西比较奇特。它使用第三个选项,而不是使用静态完成列表(必须经常更新并且容易出现错误)或通过解析帮助消息动态生成完成(通常无法接受地较慢)。它直接在pip
中传递命令行状态,以使其生成完成。
也许最相关的,也是最伟大的方法是创建一个Ruby宝石的全局完成脚本。用户只需安装一个全局完成gem(没有任何解决方法),然后完成即可用于任何其他gem。据我所知,没有人在Ruby中实现过。对于Python实现,请参阅argcomplete。
安装如下:
pip install argcomplete
activate-global-python-argcomplete --dest=/path/to/bash_completion.d
脚本很容易适应。它基本上是一个单线程来将您的解析器对象传递给argcomplete。
来源
2015-11-16 23:42:34
Six
我知道:(我希望解决这个“安装过程” - 不管它是一个约定(“把你的完成点放在这里,他们将被自动使用”)或其他东西... – awendt 2012-07-25 09:46:46