2013-07-20 29 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準備的(可能有其他變量提供,我不知道哪些可能需要修改)。它僅在沒有任何選項的情況下檢查分支的最簡單情況下進行了測試(儘管選項已完成)。

底線是 - 檢查分支的作品。