返回介绍

巴什完全

发布于 2025-05-06 21:24:12 字数 2752 浏览 0 评论 0 收藏

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。