全局别名的 Zsh 补全

Zsh completion for global aliases

有没有办法在 zsh 中为全局别名完成制表符补全?定义为:

% alias -g zshplugins=~/.zshplugins

% nvim zshpl[tab] 无法完成制表符。

我使用全局别名主要是为了不必输入文件路径,也不必将自己限制在单个命令(例如,alias zshplugin="nvim ~/.zshplugins"

我知道这些也可以在任意单行内使用(例如 | grep -i 的全局别名)并且在每个制表符笔画上都建议没有意义,但是如果有将这些包含在 directory/file 完成中的一些解决方法,那就太好了。

zshpl[tab] 会在行首完成(不包括 nvim)吗?这是我应该做的。别名并不意味着用作文件名的快捷方式。 Shell 变量可用于后者(并且它们也有完成)。我建议你定义

zshplugins=~/.zshplugins

然后

nvim $zshpl[tab]

您应该使用 shell 变量而不是全局别名。

但如果您愿意,请将以下代码添加到您的 zshrc

_complete_alias() {
    [[ -n $PREFIX ]] && compadd -- ${(M)${(k)galiases}:#$PREFIX*}
    return 1
}
zstyle ':completion:*' completer _complete_alias _complete _ignored