如何让我的别名正确完成?

时间:2014-07-07 05:59:15

标签: git alias fish

没有完成标签的别名

我为j jobs提供了gs的一些别名,git status提供了j -<TAB>的“别名命令”({{3} }})。

我希望他们让选项卡完成他们别名的东西。因此,jobs -<TAB>将像j一样完成并推荐--command, - pid等。


Idea1:从别名命令中提取定义:

如果内置任何内容告诉它将jobs视为complete --command j (complete --definitions-for jobs) ,那么也许有一种方法可以动态地执行它?基于herehere,我似乎应该能够执行以下操作:

-n

对于某些组成标志“--definitions-for”,它只输出放入的任何标志以获取当前定义(我找到了一个非常接近我想要的函数this comment

Idea2:交换命令行:

虽然这可能适用于j-&gt;工作,但我开始环顾四周并找到the docs。看起来可能很困难(除非我在检查--do-complete条件之前扩展它)。

好吧,有一个complete -c gs --do-complete "git status -" 标志,上面写着“打印指定命令行的所有完成”也许是这些内容:

{{1}}

我实际上无法弄明白如何使用--do-complete做任何事情:/

1 个答案:

答案 0 :(得分:3)

目前还没有直接支持,但这是非常需要的。请参阅fish's bug追踪器中的issue 393

目前已知的最佳解决方案来自maxfl's comment

function make_completion --argument alias command
    complete -c $alias -xa "(
        set -l cmd (commandline -pc | sed -e 's/^ *\S\+ *//' );
        complete -C\"$command \$cmd\";
    )"
end

然后,您可以运行make_completion j jobs将j替换为作业。最终这将是你可以直接设置的东西。