git 补全如何调用与您正在键入的命令相关的函数?



我正在尝试查看git-completion.bash的代码。 如果运行此文件,则可以自动完成 git 命令参数。 我想写一个非常相似的工具,但用于另一个命令(即:不是 git)。 我正在尝试弄清楚这是如何工作的,以便我可以复制/修改它。 我有一个不错的理解:

当您键入 git rebase <something><TAB> 时,会调用像 _git_rebase 之类的函数。 我不知道的是_git_rebase怎么称呼? 我在代码中的任何地方都找不到该函数。 我认为这可能与此功能有关,但我不确定。

更熟悉bash的人可以向我解释这里发生了什么以及如何称呼_git_rebase吗? 为方便起见,以下是源代码:https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

这些

函数由bash自动调用,具体取决于当前在命令行中输入的命令。

你可以看看bash的文档:

  • 8.6 可编程补全
  • 8.7 可编程补全内置

简单的例子:

$ cat compspec.foo
function _foo
{
    local cmd=$1 cur=$2 pre=$3
    if [[ $pre == "$cmd" ]]; then
        COMPREPLY=( $(compgen -W 'hello world' -- "$cur") )
    fi
}
complete -F _foo foo
$ source compspec.foo
$ foo <TAB><TAB>
hello  world
$ foo h<TAB>
$ foo hello

最新更新