如何使 `git grep` 输出看起来像 `ack` 输出?

How do you make `git grep` output look like `ack` output?

我最近发现 git grep 并开始喜欢它的速度和事实上只搜索存储库中的文件。但是来自 ack(Ubuntu 中的 ack-grep),还有一点需要改进的是输出格式,不幸的是,它更像 grep 而不是 ack .去图吧。

ack:

  1. 第一行上单独打印匹配的文件名。
  2. 颜色突出匹配的文件名 粗体绿色
  3. 打印行号,只打印行号,[=31] =]每个匹配行.
  4. 颜色突出行号一个粗体黄色
  5. 颜色突出显示每个匹配字符串一个背景黄色
  6. 在来自不同文件的匹配项之间打印 空行

另一方面,git grep:

是否有任何一组 git grep 选项,或与其他工具的组合,可以使 git grep 输出看起来像 ack 输出?

Travis Jeffery,到 git grep输出像ack:

git config --global alias.g "grep --break --heading --line-number"

然后像 git grep:

一样使用 git g
git g <search_string>

这与 ack 输出不完全匹配 -- 它缺少颜色突出显示 -- 但对于快速解决方案来说没关系。

您已经回答了您自己的部分问题(--break 在文件之间插入一个空行,--heading 单独打印文件名,-n--line-number 为您提供每行的行号)。

其余只是颜色选项,它们是 set in git config 通过 color.grep.<slot> 条目。有关完整详细信息,请参阅文档,但请注意,根据您的要求,我认为这可以解决问题:

[alias]
    ack = -c color.grep.linenumber=\"bold yellow\" \
          -c color.grep.filename=\"bold green\" \
          -c color.grep.match=\"reverse yellow\" \
          grep --break --heading --line-number

(由于引用很乱,所以您会在 git config --global --edit 中看到它)。

或者,通过一条命令进行设置:

git config --global alias.ack '-c color.grep.linenumber="bold yellow"
    -c color.grep.filename="bold green"
    -c color.grep.match="reverse yellow"
    grep --break --heading --line-number'

添加或减去 -c 选项以更改您喜欢的任何颜色,and/or 通过设置 color.grep.<name> = color 而不是使用 git ack 别名将它们设置为您首选的默认值。

应用this patch后,几乎所有事情都可以用Git配置完成:

git config --global color.grep.linenumber "bold yellow"
git config --global color.grep.filename "bold green"
git config --global color.grep.match "reverse yellow"
git config --global grep.linenumber true
git config --global grep.heading true

(缺少的位是 --break 的配置选项。)