巴什完全
2.0 新版功能。
从 click 2.0 开始,任何 click 脚本都内置了对 bash 完成的支持。在什么时候可以完成这项工作是有一定限制的,但在大多数情况下,它应该只是工作而已。
局限性
只有在脚本安装正确且未通过 python
命令。有关如何执行此操作的信息,请参见 设置工具集成 . Click 当前仅支持完成 bash 和 zsh。
它完成了什么
通常,bash 完成支持将完成子命令、选项以及类型为 click.choice 的任何选项或参数值。子命令和选项始终列出,而选项仅在至少提供了一个破折号的情况下列出。例子::
$ repo <TAB><TAB> clone commit copy delete setuser $ repo clone -<TAB><TAB> --deep --help --rev --shallow -r
此外,还可以为参数和选项提供自定义建议 autocompletion
参数。 autocompletion
应该是返回字符串列表的回调函数。当建议需要在 bash 完成时动态生成时,这很有用。回调函数将传递 3 个关键字参数:
ctx
-当前 Click 上下文。args
-传入的参数列表。incomplete
-正在完成的部分字,作为字符串。可能是空字符串''
如果尚未输入字符。
以下是使用回调函数生成动态建议的示例:
import os def get_env_vars(ctx, args, incomplete): return [k for k in os.environ.keys() if incomplete in k] @click.command() @click.argument("envvar", type=click.STRING, autocompletion=get_env_vars) def cmd1(envvar): click.echo('Environment variable: %s' % envvar) click.echo('Value: %s' % os.environ[envvar])
完成帮助字符串(仅限 zsh)
zsh 支持为完成显示文档字符串。这些参数取自选项和子命令的帮助参数。对于动态生成的完成,可以通过返回元组而不是字符串来提供帮助字符串。元组的第一个元素是完成,第二个元素是要显示的帮助字符串。
以下是使用回调函数生成带有帮助字符串的动态建议的示例:
import os def get_colors(ctx, args, incomplete): colors = [('red', 'help string for the color red'), ('blue', 'help string for the color blue'), ('green', 'help string for the color green')] return [c for c in colors if incomplete in c[0]] @click.command() @click.argument("color", type=click.STRING, autocompletion=get_colors) def cmd1(color): click.echo('Chosen color is %s' % color)
激活
为了激活 bash 完成,您需要通知 bash 可以完成脚本,以及如何完成。任何 Click 应用程序都会自动提供支持。一般的方法是通过一个名为 _<PROG_NAME>_COMPLETE
在哪里 <PROG_NAME>
应用程序的可执行名称是否为大写,并用下划线替换破折号。
如果你的工具被调用 foo-bar
,然后调用 magic 变量 _FOO_BAR_COMPLETE
. 通过将其与 source
值它将显示激活脚本,该脚本可以被琐碎地激活。
例如,为您的 foo-bar
脚本,这是您需要放入的 .bashrc
::
eval "$(_FOO_BAR_COMPLETE=source foo-bar)"
对于 zsh 用户,将此添加到 .zshrc
::
eval "$(_FOO_BAR_COMPLETE=source_zsh foo-bar)"
从这一点开始,脚本将启用自动完成功能。
激活脚本
上面的激活示例总是在启动时调用应用程序。如果您有许多应用程序,这可能会显著降低 shell 激活时间。或者,您也可以发送一个包含这些内容的文件,这就是 Git 和其他系统正在做的。
这很容易做到:
_FOO_BAR_COMPLETE=source foo-bar > foo-bar-complete.sh
对于 ZSH:
_ foo_bar_complete=源文件 foo bar>foo-bar-complete.sh
然后你把它放到你的.bashrc 或.zshrc 中:
. /path/to/foo-bar-complete.sh
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论