问题描述
如果我这样做:
alias g='git'
我放松了所有完成规则(例如,当我在键入后按 TAB 时,分支和遥控器不再自动完成,例如 g push o
)。
最佳思路
最新的 bash-completion 上游移动并重命名了一些东西。下雪了:
source /usr/share/bash-completion/completions/git
__git_complete g __git_main
在最新版本的 Ubuntu(例如 14.04,还有 Fedora 22+)中,当您遇到:
completion: function `_git' not found
完成期间。
次佳思路
适时地从 /etc/bash_completion.d/git
复制和修改,将以下行添加到您的 ~/.bashrc
:
complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
|| complete -o default -o nospace -F _git g
第三种思路
在 ~/.bashrc
中:
alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g
通过 http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04
第四种思路
首先,查找原始完成命令。例子:
$ complete | grep git
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
现在将这些添加到您的启动脚本中(例如 ~/.bashrc):
# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g
# load dynamically loaded completion functions (may not be required)
_completion_loader git
可能不需要 _completion_loader
行。但在某些情况下,补全函数只有在您键入命令并第一次按 TAB
后才会动态加载。因此,如果您没有使用原始命令,并尝试使用别名 + TAB
,您可能会收到类似“bash: completion: function not found”的错误。