如何在bash/powershell中根据上下文自动为命令补全git前缀?
实现方案
主流的Bash、Zsh都可以通过内置的命令未找到钩子实现该需求,具体配置方法如下:
Bash 配置方法
Bash提供了command_not_found_handle钩子,会在输入的系统命令不存在时触发,我们可以在该钩子中增加git仓库判断和子命令校验逻辑,满足条件就自动执行带git前缀的命令。
把以下代码添加到你的~/.bashrc文件中,执行source ~/.bashrc即可生效:
command_not_found_handle() { # 校验当前是否处于git工作目录内 if git rev-parse --is-inside-work-tree &>/dev/null; then # 校验输入的内容是否为合法的git子命令 if git help -a | grep -qw "$1"; then git "$@" return $? fi fi # 不满足条件则走默认的命令不存在提示 echo "bash: $1: command not found" >&2 return 127 }
Zsh 配置方法
Zsh对应的钩子为command_not_found_handler,拼写和Bash略有区别,逻辑完全一致。
把以下代码添加到你的~/.zshrc文件中,执行source ~/.zshrc即可生效:
command_not_found_handler() { if git rev-parse --is-inside-work-tree &>/dev/null; then if git help -a | grep -qw "$1"; then git "$@" return $? fi fi echo "zsh: command not found: $1" >&2 return 127 }
注意事项
- 如果系统中已经存在和git子命令同名的原生命令,会优先执行原生命令,不会触发自动补前缀逻辑,不会影响原有命令使用。
- 带参数的git命令也支持自动补全,比如输入
commit -m "修复bug"会自动转换为git commit -m "修复bug"执行。 - 如果担心命名冲突,也可以通过git别名实现缩短输入的需求,比如执行
git config --global alias.st status后,输入git st就等价于git status,兼容性更强。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

