【问题标题】:How do I get my aliases to have correct completion?如何让我的别名正确完成?
【发布时间】:2014-07-07 05:59:15
【问题描述】:

标签不完整的别名

我有一堆别名,例如 j 用于 jobs (here),以及“别名命令”例如 gs 用于 git status (here)。

我希望他们使用制表符完成他们正在使用的别名。所以j -<TAB> 会像jobs -<TAB> 一样完成并推荐--command、--pid 等等。


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

如果没有内置的东西告诉它将j 视为jobs,那么也许有一种方法可以动态地做到这一点?基于this commentthe docs,似乎我应该能够执行以下操作:

complete --command j (complete --definitions-for jobs)

对于一些虚构的标志“--definitions-for”,它只输出为获取当前定义而放入的任何标志(我发现一个函数complete_print 非常接近我想要的)

想法2:换掉命令行:

虽然这可能适用于 j->jobs,但我开始环顾四周,发现 git status completions。看起来可能很难(除非我可以在检查 -n 条件之前将其展开)。

嗯,有一个 --do-complete 标志,上面写着“打印指定命令行的所有完成”也许是这样的:

complete -c gs --do-complete "git status -"

不过,我实际上不知道如何使用 --do-complete 来做任何事情:/

【问题讨论】:

    标签: git alias fish


    【解决方案1】:

    目前尚不直接支持此功能,但非常需要。请参阅 fish 的错误跟踪器中的 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 别名为作业。最终这将是您可以直接设置的内容。

    【讨论】:

    • 哇,甚至与make_completion gs "git status" 合作过,谢谢!我知道我现在的问题是什么,我在“--do-complete”和它的 args 之间有一个空格!
    猜你喜欢
    • 2011-07-01
    • 2012-04-18
    • 2022-01-24
    • 2019-04-21
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多