在git-grep输出中包含列号

时间:2014-06-02 12:04:13

标签: git shell

silver searcherer--column选项,其工作方式如下:

% ag silver --column               
Brewfile
40:13:install the_silver_searcher

其中13表示匹配(银色)开始的列。

有没有办法让git-grep得到类似的内容?

修改

这样做的原因是我想在vim中使用git-grep作为grepprg(在某些情况下要快得多,例如node.js项目)。

2 个答案:

答案 0 :(得分:1)

在Git 2.19(2018年第三季度)中,“ git grep”学习了“ --column”选项,该选项不仅提供了匹配的行号,还提供了匹配项的列号。

请参见commit 240cf2acommit 6653feccommit a449f27commit 89252cdcommit 017c0fccommit 68d686e(2018年6月22日)和{{3} }(2018年6月20日)作者:commit f8a0c6e
(由Taylor Blau (ttaylorr)Junio C Hamano -- gitster --中合并,2018年7月18日)

  

builtin/grep.c:将'--column'选项添加到'git-grep(1)'

     

教“ git-grep(1)”一个新选项“ --column”以显示该列   非上下文行中第一个匹配项的编号。
  这样可以commit d036d66,并允许类似的附加操作   脚本功能。

     

例如:

$ git grep -n --column foo | head -n3
.clang-format:51:14:# myFunction(foo, bar, baz);
.clang-format:64:7:# int foo();
.clang-format:75:8:# void foo()

所以:

  

运行“ git jump grep”时,也会发出列号,   例如git jump grep "hello"将返回:

-----------------------------------
foo.c:2:9: printf("hello word!\n");
-----------------------------------

答案 1 :(得分:0)

不是我希望的答案,但这是一个手动编写的脚本:

git grep -n $1 | while read git_grep; do

  file_and_line=$(echo "$git_grep" | cut -d: -f1 -f2)
  match=$(echo "$git_grep" | sed 's/[^:]*:[^:]*:\(.*\)/\1/')
  column=$(echo "$match" | awk "{print index(\$0, \"$1\")}")

  echo "$file_and_line:$column:$match"
done

动作:

% ./bin/grepprg.sh silver  
Brewfile:40:13:install the_silver_searcher