【问题标题】:How do I get bash autocomplete to work with git aliases that use shell commands?如何让 bash 自动完成功能与使用 shell 命令的 git 别名一起使用?
【发布时间】:2014-08-10 13:43:51
【问题描述】:

在我的 git 配置中,我有一个相对较长的别名,它以漂亮的格式输出最近 git 提交的日志:

lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'

我还有另一个别名,它通过在命令中添加--all 选项建立在前一个别名的基础上。我不想通过在两个别名中指定整个命令字符串来重复自己,所以我只是将我的新别名 shell 放到前一个别名中:

la = !git lg --all

这很好用,但有一个问题:虽然分支名称的自动补全与我的常规 git lg 别名一起工作得很好,但它对于壳出来的那个根本不起作用。

如何使 git 分支名称的自动补全功能适用于其他命令的别名?

注意:这个问题与How do I get bash completion to work with aliases? 不同,因为这个问题处理的是 git 命令的 bash 别名,而不是 git 的内置别名系统。

【问题讨论】:

    标签: git bash shell


    【解决方案1】:

    在这种情况下,键入任何分支名称都会给出相同的结果,因为--all 选项会显示所有引用。但是,如果您添加

    function _git_la() {
      _git_log
    }
    

    到您的 shell 启动文件,它应该正确地自动完成。

    【讨论】:

    • 抱歉,我想我选了一个不好的例子,la。我确实有类似的别名,但分支名称自动完成更有用。感谢您的帮助。
    • 另外,你知道这种行为记录在哪里吗?我已经开始阅读 bash 自动补全,到目前为止我看到的所有示例都使用 bash complete 内置函数。所以我猜这是特定于 git 的东西?
    • 自动补全是一个 shell 功能。它也是完全可编程的。您可以在 /etc/bash-completion.d/usr/share/bash-completion 中查找您的 git 完成文件,看看它是如何完成的。
    • 该文件有 2000 多行。这种行为(我可以定义一个函数来使自动完成工作)除了源代码本身之外没有记录在任何地方?
    • 哦,我以为你想知道 git 补全如何完成命令。因为基本上 shell 所做的只是寻找与您键入的内容完全相同的函数(带下划线)。因此,您定义了一个名称与您的别名类似的函数,并为git log 调用完成函数。有关完成的更多信息,您可以查看gnu.org/software/bash/manual/bash.html#Programmable-Completion
    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 2012-01-30
    • 2018-04-01
    • 2012-04-09
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多