Bash 从非前缀子字符串完成Git分支名称选项卡

Bash 从非前缀子字符串完成Git分支名称选项卡,bash,git,autocomplete,Bash,Git,Autocomplete,Git完成脚本允许您在命令行中标记分支的完整名称。我希望能够基于分支名称中的任何子字符串完成制表符 示例分支: TS-45673-great-branch TS-45691-lesser-branch 要当前使用制表符完成以访问TS-45673-great-branch,只需键入TS-4567 我希望能够键入gre 今天有没有办法做到这一点?我不确定您是否找到了更好的解决方案。我有一个小问题。我的新公司也希望遵循类似的分支机构惯例。(从技术上讲,本地分支机构不应该是一个问题,但在推动其进行公关

Git完成脚本允许您在命令行中标记分支的完整名称。我希望能够基于分支名称中的任何子字符串完成制表符

示例分支:

TS-45673-great-branch
TS-45691-lesser-branch
要当前使用制表符完成以访问
TS-45673-great-branch
,只需键入
TS-4567

我希望能够键入
gre


今天有没有办法做到这一点?

我不确定您是否找到了更好的解决方案。我有一个小问题。我的新公司也希望遵循类似的分支机构惯例。(从技术上讲,本地分支机构不应该是一个问题,但在推动其进行公关时,如果我们遵循本地分支机构的相同模式,则会很方便)

这就是我做的黑客。 首先,找到一种方法来获取所需分支的列表。比如说,

git branch | cut -c3- | egrep "^TS-[[:digit:]]+-$cur"
例如,在git完成脚本上,如果使用此脚本 转到
\uu git\u refs()

在该方法中,只需将这一行添加到顶部的某个位置。(我找不到理想的位置,所以在顶部添加了它。打印的任何行都将被视为自动补全选项。即使
echo hello
也会将hello视为选项


如果您想找到git完成脚本所在的位置

$ complete -p git
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
然后,
\uuuuugit\uwrap\uuuugit\umain
是命令

# Turn on extended shell debugging
shopt -s extdebug

# Dump the source file and other details
declare -F __git_wrap__git_main

# Turn off extended shell debugging
shopt -u extdebug
注:

  • 这并不完美,但目前仍适用。在某些情况下,情况会非常复杂。例如,如果您有另一个
    grear\u分支
    ,然后键入
    gre
    和tab,将打印所有三个分支,并且只会填写三个分支共用的前缀(TS-1)
  • 只需添加egrep
    “^TS-[:digit:][]+-$cur”
    ”^TS-[:digit:][]+-.$cur”即可添加更好的子字符串搜索
  • local pattern=`echo $cur | sed -e 's/\(.\)/\1.*/g'` 
    git branch | cut -c3- | egrep "^TS-[[:digit:]]+-$pattern"