2016-09-19 191 views
5

我最近找到了git grep,并开始喜欢它的速度和实际上只搜索回购中的文件。但是来自ack(Ubuntu中的ack-grep),剩下的一件事是输出格式化,不幸的是,它比更像ack。去搞清楚。如何让`git grep`输出看起来像'ack`输出?

ack

  1. 本身上打印的第一线匹配文件名。
  2. 颜色突出显示匹配文件名 a 加粗绿色
  3. 打印的行号,和行号,与每个匹配线
  4. 颜色突出显示行号 a 加粗黄色
  5. 颜色突出显示每个匹配字符串 a 背景黄色
  6. 在不同文件的匹配之间打印空行

。另一方面,git grep

  • 打印上匹配线文件名
  • 打印没有行号
  • 打印无空行来自不同文件的匹配之间。
  • 颜色凸显匹配的文本,一个大胆的红色

有没有一套git grep选项,或者与其他工具的组合,可以使git grep输出看起来像ack输出?

回答

9

你已经回答了你自己的问题的一部分(--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选项来改变任何你喜欢的颜色,和/或通过设置color.grep.<name> = color,而不是使用git ack将它们设置为您喜欢的默认值别名。

+1

也许'ack'会是一个更好的别名。 –

+0

这样做效果很好,但有一件令人讨厌的事情是,我无法在像'grep'和'ack'这样的搜索条件之后放置选项。例如,'> git ack“搜索条件”-C 5“会导致'fatal:坏标志'-C'在文件名后使用。公平地说,'> git grep“搜索条件”-C 5“也是如此。 – CivFan

3

Travis Jeffery,以git grep输出像ack

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

然后用git g,就像您git grep

git g <search_string> 

这不是一个完整的比赛ack输出 - 它缺少颜色突出显示 - 但对于快速解决方案来说没关系。