ZSH:子命令的完成别名,例如“compdef foo='git log'”

Zac*_*gle 5 git zsh completion

我有一堆工具可以将所有参数传递给内部调用,例如“git log”。一个简单的例子可能如下所示:

#!/usr/bin/env zsh
git log --since='1 year ago' "$@"
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过执行以下操作来获得完成别名:

compdef myscript=grep
Run Code Online (Sandbox Code Playgroud)

但是,尚不清楚如何对 等子命令执行此操作git log。有没有办法做到这一点?

小智 -1

有一个解决方案可以使用别名,但不能使用函数或脚本。就你而言,使用git log就足够了。

  1. 创建别名。
    mygitlog="git log --since='1 year ago'"

  2. 在.zshrc中启用compinit以完成 zsh 。
    autoload -Uz compinit && compinit

  3. 禁用completealiases选项,这可以防止别名在尝试完成之前被内部替换。
    unset completealiases

mygitlog在 Git 存储库中输入并按两次后Tab,zsh 会建议您去年所做的提交和标签。