在 zsh 中向自动完成功能添加触发命令

在 zsh 中向自动完成功能添加触发命令

当您定义一个像 这样的别名时alias g=git,shell 会选择它并运行相应的自动完成功能。现在,有一个名为 的程序hub,它基本上是 git 的超集,并添加了一些特定于 github 的功能。建议使用hubalias git=hub当然,这不会触发 git 的自动完成功能,这是有道理的。

现在,如果我想让 git 的自动完成触发器用于 hub,我知道的唯一方法是编辑/usr/share/zsh/functions/Completion/Unix/_git并添加hub第一行作为触发器。虽然这可行,但不切实际,因为该文件将在下一个 zsh 版本中被覆盖。假设 hub 不会很快提供 zsh 完成功能,还有其他方法可以添加hub到 git 自动完成功能的触发命令中吗?

答案1

您可以定义一个额外的自动完成文件夹,其中包含您的自定义定义。如果您有类似于默认 .zshrc 的内容,那么您只需更新$fpath致电之前自动加载-Uz compinit

例子:

...
zstyle ':completion:*' use-compctl true
zstyle ':completion:*' verbose true
zstyle :compinstall filename "$HOME/.zshrc"

fpath=($HOME/autocomplete $fpath)

autoload -Uz compinit
compinit
# End of lines added by compinstall
...

然后,您应该能够将更新后的 _git 复制到您的个人自动完成文件夹中,并将其用于代替原始文件。

相关内容