2016-09-19 188 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輸出 - 它缺少顏色突出顯示 - 但對於快速解決方案來說沒關係。