如何为git命令设置自动完成别名?

时间:2013-07-20 06:59:16

标签: git bash autocomplete

我试图创建这样的别名:

alias '.a'='git add'
alias '.d'='git diff'
alias '.p'='git push'
alias '.f'='git fetch'
alias '.o'='git checkout'
alias '.c'='git commit -m'
alias '.b'='git branch'
alias '.s'='git status'
alias '.m'='git merge'
alias '.l'='git log -n 20 --oneline'

自动完成总是很重要,所以我尝试了这样:

complete -F _git_checkout .o

但是在输入<tab><tab>之后我收到了错误:

#➤➤ .o bash: [: 1: unary operator expected
bash: [: 1: unary operator expected

然后我怎样才能让它在这里工作?


我的桌面在Ubuntu 13.04上运行


@ 1,在Ubuntu上添加一段似乎失败的代码:

➤➤ complete | ack-grep alias
complete -F _alias_completion::grep grep
complete -F _alias_completion::la la
complete -F _alias_completion::ll ll
complete -F _alias_completion::l l
complete -F _alias_completion::ls ls
complete -a unalias

2 个答案:

答案 0 :(得分:1)

我一直在寻找专门用于&#34; git checkout&#34;的自动完成解决方案。别名(gc,这可能不是一个好的别名),并提出定义修改$ COMP_WORDS和$ COMP_CWORD变量:

# !/bin/sh

# Define a custom complete function for 'git checkout'.
___git_gco ()
{
    # Set the first word to git and insert checkout.
    COMP_WORDS=(git checkout ${COMP_WORDS[@]:1})
    # Increment the current word cursor, since we added one word.
    COMP_CWORD=$((COMP_CWORD + 1))

    # Show some debug information.
    # echo -n -e "\n${COMP_WORDS[0]}"
    # echo -n -e "\n${COMP_WORDS[1]}"
    # echo -n -e "\n${COMP_WORDS[$COMP_CWORD]}"
    # echo -n -e "\n${COMP_WORDS[@]}"

    # Call Git's default complete function.
    _git
}
# Define an alias for 'git checkout'.
alias gco="git checkout"
# Set the new alias to use the custom complete function.
complete -o bashdefault -o default -o nospace -F ___git_gco gco

我不知道这个解决方案有多好,因为它是用bash编写的(我可能还有其他变量,我不知道哪些可能需要修改)。它仅针对最简单的检查分支而没有任何选项的情况进行了测试(尽管选项已完成)。

底线是 - 用于检查分支。

答案 1 :(得分:0)

不要定义complete -F _git_checkout .o之类的完成。 使用别名完成代码(上面的Ansgar Wiechers指出)。在获取该脚本后,完成了

complete -o bashdefault -o default -o nospace -F _alias_completion::.o .o

已定义。