我试图创建这样的别名:
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 :(得分: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
已定义。