gpt4 book ai didi

git - git 自定义子命令的 bash 完成?

转载 作者:行者123 更新时间:2023-12-05 02:00:51 27 4
gpt4 key购买 nike

假设我有一个 git-ccPATH 中可执行.如果git-cc支持--help , 那么很容易提供足够的补全

complete -F _longopt git-cc

这使得 $ git-cc --<TAB>完成(根据帮助输出)。但是git cc --<TAB>不会完成(即使它运行良好)。更重要的是,如果我为自定义子命令创建一个 git 别名,例如cc-sensible-defaults = cc --opt1 ... , 这也行不通,在这种情况下,简单地删除空格( git-cc 而不是 git cc )不是一种选择。

要做什么?我试过弄乱 __git_complete [git-]cc _longopt , 但各种组合都没有任何好处。它似乎是为了完成 bash 别名(如 gl = git-log ),而不是子命令。 git/git-completion.bash中的介绍正如预期的那样,不是很有帮助,包含令人困惑的内容

# If you have a command that is not part of git, but you would still
# like completion, you can use __git_complete:
#
# __git_complete gl git_log
#
# Or if it's a main command (i.e. git or gitk):
#
# __git_complete gk gitk

(WTH 是 _git_log?他们的意思是 _git_log,它确实是一个函数吗?它是某种约定吗?)

最佳答案

What to do?

只需定义一个函数,使用前导 _git_ 前缀进行编译。

# you should rather use COMPREPLY+=(..) or call `__gitcomp` to append
$ _git_cc() { COMPREPLY=(-a -b); }
$ git cc <tab>
-a -b
$ git cc -

参见 __git_complete_command :

__git_complete_command () {
local command="$1"
local completion_func="_git_${command//-/_}"
...
if __git_have_func $completion_func
then
$completion_func
return 0

I've tried messing around with __git_complete

据我所知,__git_complete 是相反的——你想要一个像 git 子命令一样完整的普通命令。例如:

$ _git_cc() { COMPREPLY=(-a -b); }
$ alias mycommand='git cc'
$ __git_complete mycommand git_cc # or __git_complete mycommand _git_cc
$ mycommand <tab>
-a -b
$ mycommand -

WTH is _git_log?

_git_log是为 git log 生成完成的函数。

Did they mean _git_log, which is indeed a function?

是的。参见 __git_complete测试是否存在带有 _main 后缀或 _ 前缀或没有任何前缀/后缀的函数。

Is it some convention?)

是的。

关于git - git 自定义子命令的 bash 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66987181/

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