我在我的.zshrc中有一些别名函数,例如gb
用于git branch
和gco
用于git checkout
。当我记住我正在创建、删除、签出等的完整分支名称时,这非常有用。但是,我注意到完成似乎不再有效。以前,我可以做
$ git checkout m<TAB>
如果这是分支的名称,它将自动完成主节点。但是,现在,当我使用时,我收到以下错误:
$ gco m<TAB>
_git:15: parse error: condition expected: 1
我不确定为什么会发生这种情况。似乎可能缺少一个参数,但我不确定为什么。
编辑:
我在我的 .zshrc 文件中为 git branch
和git checkout
设置别名,如下所示:
alias gco='git checkout'
alias gb='git branch'
经过更多的挖掘,我找到了解决 bash 相同问题的解决方案,它看起来也适用于 zsh。定义__define_git_completion
和__git_shortcut
两个函数后,您将调用__git_shortcut
来设置别名并在一次调用中完成。
__define_git_completion () {
eval "
_git_$2_shortcut () {
COMP_LINE="git $2${COMP_LINE#$1}"
let COMP_POINT+=$((4+${#2}-${#1}))
COMP_WORDS=(git $2 "${COMP_WORDS[@]:1}")
let COMP_CWORD+=1
local cur words cword prev
_get_comp_words_by_ref -n =: cur words cword prev
_git_$2
}
"
}
__git_shortcut () {
type _git_$2_shortcut &>/dev/null || __define_git_completion $1 $2
alias $1="git $2 $3"
complete -o default -o nospace -F _git_$2_shortcut $1
}
__git_shortcut ga add
__git_shortcut gb branch # I use this one.
__git_shortcut gba branch -a
__git_shortcut gco checkout # and I use this one, too.
__git_shortcut gci commit -v
__git_shortcut gcia commit '-a -v'
__git_shortcut gd diff
__git_shortcut gdc diff --cached
__git_shortcut gds diff --stat
__git_shortcut gf fetch
__git_shortcut gl log
__git_shortcut glp log -p
__git_shortcut gls log --stat
- 在此处查看原始答案的要点。
- 在此线程上找到答案。
如果你也想让自动完成工作,你应该在 .gitconfig 中创建别名。但是,您必须拼写出 git 命令。
[alias]
gb = branch
gco = checkout
等。。。
您还可以添加如下别名:
git config –-global alias.gb branch
它们将被附加到您的 .gitconfig 中
干杯