zsh中别名子命令的Tab补全:alias gco='git checkout'

38

我有一个别名:alias gco='git checkout'

如何添加制表符补全,就像我键入了git checkout一样?

对于我的alias g ='git',我使用compdef g ='git'

我一直在尝试使用compdef,但我没有成功。


1
在zsh中,只要我定义了一个别名(不需要compdef或其他任何东西),它就能正常工作。你试过吗? - Anton Kovalenko
4
是的,我已经尝试过了,但只能得到文件名自动补全。 - William Bettridge-Radford
3个回答

27

禁用此选项,您也很好...

# don't expand aliases _before_ completion has finished
#   like: git comm-[tab]
# setopt complete_aliases

10
这对我很有用。只是为了明确,您想要在此响应中注释掉该行,而不是让您的 config.zsh 看起来像它。如果您想要为别名启用自动完成,则不应设置 complete_aliases 选项。 - Matt Dodge

27

您无需进行任何操作,特别是compdef g='git',它应该可以在没有任何配置的情况下正常工作。只有在使用函数替代别名时才需要做些调整。


2
我只是得到文件完成。我注意到oh-my-zsh使用compdef; https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh - William Bettridge-Radford
3
这些人可能做了一些事情来禁用默认行为,或者只是在做不必要的工作。只需执行zsh -f <CR> autoload -Uz compinit <CR> compinit <CR> alias gco ='git checkout' <CR> gco <Tab>,此时您将看到一个引用列表。另一个测试:alias g ='git' <CR> compdef g ='hg' <CR> g <Tab>compdef 被忽略了,我得到了 git 的自动补全而不是 Mercurial 的自动补全,并且需要 compdef git ='hg' 来覆盖这种行为(显然对于别名和 git 都需要)。 - ZyX
可以的,非常感谢。我正在使用从Github上派生的dotfiles。我想我会先把它们全部关闭,然后再逐步添加回去。https://github.com/holman/dotfiles - William Bettridge-Radford
我的问题是我实际上正在使用函数。谢谢! - Ambrose Little

7

对于我来说,为了使下面的代码片段工作,添加complete_aliasescompdef都是必要的:

alias docker-compose-dev='docker-compose -f docker-compose.yml -f docker-compose-dev.yml'

compdef docker-compose-dev='docker-compose'
setopt complete_aliases

这正是我正在寻找的!谢谢! - xero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接