Zsh 函数:将完成转发到子函数
Zsh function: forward completion to subfunction
很多时候我最终会围绕现有的编写包装函数,例如:
function gl {
some_computed_stuff=...
git --no-pager log --reverse $some_computed_stuff "$@"
}
function m {
make "$@" && notify-send success || notify-send failed
}
我知道别名保持自动完成功能,但有时需要函数,在这种情况下自动完成功能会丢失。
例如,在这里我想为我的函数 gl
保留 git log
完成或 m
.
完成 make
我尝试添加 compctl -K _git gl
但没有提出任何建议。它无论如何都行不通,因为我必须以某种方式找到如何为 _git
自动完成脚本提供 log
参数,所以我的问题是:
有没有办法让 ZSH(还有 bash)理解键入 gl
与 git log
完全相同?类似的东西(仅适用于 ZSH):
compctl 'git log' gl
compctl 'make' m
对于 zsh,您可以使用 compdef 函数创建一个新的补全。
在其基本形式中,它将一个完成函数与一个词相关联。如果 zsh 已经内置了许多补全,那么就可以重用它们。例如,对于问题中的 m
函数:
$ compdef _make m
根据文档,如果在完成函数中定义了特定服务,您还可以定义完成。同样,由于 zsh 带有 _git
完成并且它已经定义了 git-log
服务,因此问题中的 gl
函数可以自动完成:
$ compdef _git gl=git-log
在 Linux,您可以在 /usr/share/zsh/functions/Completion/Unix/
中看到现有的完成实现。您可以阅读完成实现以查看它们定义了哪些服务。
很多时候我最终会围绕现有的编写包装函数,例如:
function gl {
some_computed_stuff=...
git --no-pager log --reverse $some_computed_stuff "$@"
}
function m {
make "$@" && notify-send success || notify-send failed
}
我知道别名保持自动完成功能,但有时需要函数,在这种情况下自动完成功能会丢失。
例如,在这里我想为我的函数 gl
保留 git log
完成或 m
.
make
我尝试添加 compctl -K _git gl
但没有提出任何建议。它无论如何都行不通,因为我必须以某种方式找到如何为 _git
自动完成脚本提供 log
参数,所以我的问题是:
有没有办法让 ZSH(还有 bash)理解键入 gl
与 git log
完全相同?类似的东西(仅适用于 ZSH):
compctl 'git log' gl
compctl 'make' m
对于 zsh,您可以使用 compdef 函数创建一个新的补全。
在其基本形式中,它将一个完成函数与一个词相关联。如果 zsh 已经内置了许多补全,那么就可以重用它们。例如,对于问题中的 m
函数:
$ compdef _make m
根据文档,如果在完成函数中定义了特定服务,您还可以定义完成。同样,由于 zsh 带有 _git
完成并且它已经定义了 git-log
服务,因此问题中的 gl
函数可以自动完成:
$ compdef _git gl=git-log
在 Linux,您可以在 /usr/share/zsh/functions/Completion/Unix/
中看到现有的完成实现。您可以阅读完成实现以查看它们定义了哪些服务。