使用 zsh 自动补全别名

使用 zsh 自动补全别名

我在 .git 中为 git 创建了一些别名zsh。例如:gch= git checkoutgrb=git rebase --committer-date-is-author-date以及一些更复杂的命令有用zsh函数git。但是我怎样才能允许这些别名使用zsh git自动完成功能呢?

答案1

我也遇到过同样的问题。您应该检查该选项是否completealiases已设置。它可以防止别名在尝试完成之前被内部替换。就我而言,setopt completealiases从我的.zshrc解决了问题。你可以尝试unsetopt completealiases如果哦我的zsh设置它。

答案2

如果您打开包含自动加载函数定义的文件以git完成:
在我的 ubuntu 系统上,其:

/usr/share/zsh/functions/Completion/Unix/_git

在文件顶部您将看到#compdef声明

#compdef git git-cvsserver git-receive-pack git-upload-archive git-upload-pack git-shell gitk tig

您可以尝试将别名添加到#compdef定义中,例如

#compdef git git-cvsserver git-receive-pack [...] tig gch grb
                                                      ^^^ ^^^

然后启动一个新的 shell 来加载新指令。
然后尝试调用完成。

什么是/usr/share/zsh/functions/Completion/Unix/_git

它包含自动加载的“函数”,定义#compdef指令中定义的所有命令的完成行为,在本例中是git命令系列,它存在于 compinit 中,fpath并在完成系统初始化时由 compinit 自动加载。

什么是#compdef

man zshcompsys

#compdef name ... [ -{p|P} pattern ... [ -N name ... ] ]
该文件将成为可自动加载的,并且在完成名称时将调用其中定义的函数,每个名称可以是其参数要完成的命令的名称或下面描述的 -context- 形式的许多特殊上下文之一。

答案3

堆积如山the_velour_frog 的回答,如果你不想修改原来的完成文件。您可以compdef直接使用:

compdef <completion_function> <function>

例如

compdef _git gch

答案4

我也做过类似的事情。你在使用 oh-my-zsh 吗?如果是这样,请确保您已在文件中启用 zsh-completions 插件.zshrc。我还推荐 zsh-autosuggestions 插件。

完成此操作后,您需要将以下内容添加到您的.zshrc文件中(如果尚不存在)

fpath=(~/.zsh/completions $fpath)
autoload -U compinit && compinit

相关内容