2013-07-20 30 views
1

我试图像这样创建别名:如何为git命令设置自动完成别名?

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 
+0

你在哪个环境下运行这个? – 2013-07-20 07:08:51

+0

@Cupcake是Ubuntu 13.04 – jiyinyiyong

+1

SU的[这个答案](http://superuser.com/a/437508)是否有帮助? –

回答

0

不要这样定义complete -F _git_checkout .o落成。 使用别名完成代码(由上面的Ansgar Wiechers指出)。在采购该脚本后,完成如

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

已被定义。

+0

我发现了另一个问题。你的anwser帮助我使它工作,但在OS X上,虽然在Ubuntu上仍然存在问题。我粘贴'complete |的输出上面的“ack-grep别名”。我已经检查过,我的别名和辅助函数都被加载了。但是,按两次标签的原因是彼此不同。 – jiyinyiyong

+0

哪个命令的响应不同,以及如何? – Armali

+0

https://gist.github.com/jiyinyiyong/6218487在这里粘贴了一些代码..我在http://superuser.com/a/437508中加载了脚本的别名,但'complete'是不同的。 Ubuntu版本不包含我的别名,例如'.g .a'。 – jiyinyiyong

1

我一直在寻找一个自动完成的解决方案专为“混帐结账”的别名(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准备的(可能有其他变量提供,我不知道哪些可能需要修改)。它仅在没有任何选项的情况下检查分支的最简单情况下进行了测试(尽管选项已完成)。

底线是 - 检查分支的作品。