【问题标题】:zsh: compinit and autocomplete function redefinitionzsh:compinit 和 autocomplete 函数重新定义
【发布时间】:2022-12-12 03:11:36
【问题描述】:

我正在尝试了解 zsh 中的自动完成功能是如何工作的。我有一个简单的脚本文件 (example.zsh),我正在尝试创建一个简单的自动完成函数来描述它的每个参数。为此,我首先创建了一个简单的 _example 文件,如下所示:

#compdef create_ca

_arguments \
    "--caKey[name of the file that will hold the keys used for generating the certificate (default: ca.key)]" \
    "--caCrt[name of the file that will hold the certificate with the public key (default: ca.crt)]" \
    "--cn[common name for the root certificate (default: root.GRM)]" \
    "--days[number of days that certificate is valid for (default: 10500)]" \
    "--size[key size (default: 4096)]"  \
    "--help[show this help screen]"

该文件与脚本位于同一文件夹中,我已经更新了我的.zshrc 文件,以便它将该文件夹添加到$fpath

fpath=(~/code/linux_certificates $fpath)

autoload -Uz compinit
compinit -D

我正在使用 D 选项,因此不会生成 .zcompdump。乍一看,一切正常,但当我尝试更新助手自动完成功能时,我看不到这些更改(例如:更改描述)。我尝试重新运行 compinit 命令,并在使用缓存 .zcompdump 时删除该文件。但是,它根本不起作用。我设法让它工作的唯一方法是删除自动完成辅助函数:

unfunction _create_ca

这是预期的行为吗?我的意思是,运行 compinit -D 是否足以重新加载我的助手自动完成功能?

顺便说一句,关于如何创建自动完成功能的任何好的教程(除了官方文档)?

谢谢。

【问题讨论】:

    标签: autocomplete zsh oh-my-zsh


    【解决方案1】:

    一旦一个函数被加载,它就不会被再次加载。这就是为什么你首先必须取消你的功能,导致 Zsh 卸载它,所以它可以再次加载。

    或者,您可以只使用exec zsh 来重新启动您的 shell。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2011-02-08
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多