gpt4 book ai didi

git - Bash 完成 : Honor repository-specific Git alias in alias completion

转载 作者:IT王子 更新时间:2023-10-29 01:03:20 27 4
gpt4 key购买 nike

假设 bash 配置了以下别名:

alias up="git --git-dir /path/to/backup/.git"

那个特定的存储库 - 并且只有那个存储库 - 具有以下 git 别名:

[alias]
backup = commit --allow-empty-message

如何up自动完成 backup


这会自动完成 backup但不是 up :

cd /a/different/dir
git --git-dir=/path/to/backup/.git ba

这会自动完成 up使用标准 git 命令但不使用 backup :

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main up


编辑:Etan 是对的,完成函数需要查看扩展的别名,所以我创建了以下内容:

CompletableAlias() {
if (($#<2)); then
return 1
fi
source_c="$1"
target_c="$2"
target_a=( "${@:2}" )
target_s="${target_a[*]}"
alias "${source_c}=${target_s}"
completion_modifier="__${source_c}_completion"
completion_original="$( complete -p "$target_c" 2>/dev/null |
sed 's/.*-F\W\+\(\w\+\).*/\1/'
)"
if [[ -n "$completion_original" ]]; then
read -r -d '' completion_function <<-EOF
function $completion_modifier() {
COMP_LINE="\${COMP_LINE/#${source_c}/${target_s}}"
((COMP_POINT+=${#target_s}-${#source_c}))
((COMP_CWORD+=${#target_a[@]}-1))
COMP_WORDS=( ${target_a[@]} \${COMP_WORDS[@]:1} )
$completion_original
}
EOF
eval "$completion_function"
completion_command="$( complete -p "$target_c" |
sed "s/${completion_original}/${completion_modifier}/;
s/\w\+\$/${source_c}/"
)"
$completion_command
fi
}


source "/usr/share/bash-completion/completions/git"

CompletableAlias "up" "git" "--git-dir" "/path/to/backup/.git"

但是出现莫名其妙的问题:

  • up bac<Tab>不工作
  • up <Tab>使用默认完成并且不列出 git 子命令
  • 还有更多...

编辑 2:更新脚本以使用 Re: Bash completion of aliased commands 中的建议修复上述问题.显然这是一个很常见的任务。但是现在我遇到了这个错误信息:

$ cd /a/different/dir
$ up backup<Tab> fatal: Not a git repository (or any of the parent directories): .git

最佳答案

在如此复杂的情况下你真的不应该使用别名,使用 bash functions .别名更像是 C 中的预处理器(在使用意义上),而函数更像是……代码函数。而且我发现它们也更“可自动完成”。

您还可以查看其他 shell 如何解决此问题,例如 fish .

关于git - Bash 完成 : Honor repository-specific Git alias in alias completion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com