自动完成Git命令,如Mercurial

时间:2015-10-27 21:04:37

标签: git mercurial

不完全确定如何表达问题,但Mercurial有一个功能我非常喜欢当你指定命令的一部分时,它足够聪明地识别你的意思。例如:hg sta将扩展为hg status

有没有办法在Git中获得等效行为,以便(例如)git sta会自动扩展为git status

编辑:澄清:我知道你可以用Git标签完成。我也知道你可以创建别名来缩短命令。我想要的就像是Mercurial,如果你没有选项卡完成它会在可能的情况下推断命令。例如:

git stas

然后输入git stash执行。

2 个答案:

答案 0 :(得分:1)

这个Mercurial功能非常方便,因为它确切地知道字母数量是否足够,所以当命令不明确时。它还为您提供了可能性列表。

这就是说,git中不存在这个特性,并且它似乎需要提供与shell相关的完成,如上所述。如果你想与git开发人员讨论这个问题,你仍然可以在http://www.mail-archive.com/git@vger.kernel.org/邮件列表上提出增强请求(或者如果已经被询问过,请查看之前)。

答案 1 :(得分:0)

只需将this脚本放到〜/ .git-completion.bash

即可

并将此行添加到〜/ .bashrc

#added by KES
export LESS="-RFXS -x4"
export TZ='Europe/Zaporozhye'


#Turn off wired ~
printf "\e[?2004l"

if [ -z "$SSH_CLIENT" ]; then
    export EDITOR="subl"
else
    export EDITOR="rsub --port 52697"
    export RMATE_PORT="52697"
fi

alias gn="git-number"
alias ge="gn -c $EDITOR"
alias ga="gn add"
alias gap="EDITOR='$EDITOR -w' gn add -p"
alias gd="gn -c git diff -b -w --ignore-blank-lines"
alias gds="gd --staged"
alias gc="gn -c git checkout"
alias gcf="git flow feature checkout"
alias gl="gn -c git log -w -b -p --ignore-blank-lines"
alias gls="git log --stat"
alias cm="EDITOR='$EDITOR -w' git commit"

gcd() {
    test -n "$1" && cd $(dirname $(git list $1))
}

source ~/.git-completion.bash
__git_complete gn  _git
__git_complete ga  _git_add
__git_complete gap _git_add
__git_complete gd  _git_diff
__git_complete gds _git_diff
__git_complete gc  _git_checkout
__git_complete gcf _git_checkout
__git_complete gl  _git_log
__git_complete gls _git_log
__git_complete cm  _git_commit
#added by KES

您只需要source ~/.git-completion.bash但为方便起见,我会稍微使用

注意:git sta的一个标签不起作用,因为有更多的完成次数:

$ git sta
stage    stash    status

尝试按两次 TAB ,或git stat + TAB