我在 .git 中为 git 创建了一些别名zsh
。例如:gch
= git checkout
、grb
=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