1

我试图创建这样的别名:

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
4

2 回答 2

1

我一直在寻找专门针对“git checkout”别名(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 准备的(可能提供了其他变量,我不知道哪些可能需要修改)。它仅针对没有任何选项的签出分支的最简单情况进行了测试(尽管选项确实完成了)。

底线是 - 用于签出分支。

于 2014-08-13T17:34:50.470 回答
0

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

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

已被定义。

于 2013-07-30T12:50:25.497 回答