2

.zshrc にgbforgit branchgcoforなどのエイリアス関数がいくつかあります。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'
4

2 に答える 2

3

もう少し掘り下げた後、zshでも同様に機能するように見えるbashの同じ問題の解決策を見つけました。__define_git_completion2 つの関数を定義した後、1 回の呼び出しでエイリアスと補完を設定するために呼び出します__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
于 2012-06-04T21:32:51.990 に答える
0

オートコンプリートも機能させたい場合は、.gitconfig にエイリアスを作成する必要があると思います。ただし、git コマンドをスペルアウトする必要があります。

[alias]
gb = branch
gco = checkout

等...

次のようにエイリアスを追加することもできます。

git config –-global alias.gb branch

それらは .gitconfig に追加されます

乾杯

于 2012-06-04T14:59:51.233 に答える