git 高级别名完成

git advanced alias completion

我的 .gitconfig 文件中有 advanced 别名,我希望它支持制表符补全。

例如,这个简单的别名允许 refs 的制表符补全(假设 git 补全已被获取):

[alias]
  co = checkout

然而,这不是:

[alias]
  co = "!f() { git checkout \"${@}\"; }; f}"

有什么方法可以为这些别名添加对制表符补全的支持吗?

事实证明,至少从 git v2.1.0 开始,就可以添加 tab-completion 对“复杂别名”的支持。每 git-completion.bash:

# If you use complex aliases of form '!f() { ... }; f', you can use the null
# command ':' as the first command in the function body to declare the desired
# completion style.  For example '!f() { : git commit ; ... }; f' will
# tell the completion to use commit completion.  This also works with aliases
# of form "!sh -c '...'".  For example, "!sh -c ': git commit ; ... '".

因此,这有效:

  co = "!f() { : git checkout ; git checkout \"${@}\"; }; f}"

请注意,模式 !f 很重要。这不起作用:! f(插入space,尽管函数名称并不重要)。