silver searcherer有--column
选项,其工作方式如下:
% ag silver --column
Brewfile
40:13:install the_silver_searcher
其中13表示匹配(银色)开始的列。
有没有办法让git-grep
得到类似的内容?
修改
这样做的原因是我想在vim中使用git-grep
作为grepprg
(在某些情况下要快得多,例如node.js项目)。
答案 0 :(得分:1)
在Git 2.19(2018年第三季度)中,“ git grep
”学习了“ --column
”选项,该选项不仅提供了匹配的行号,还提供了匹配项的列号。
请参见commit 240cf2a,commit 6653fec,commit a449f27,commit 89252cd,commit 017c0fc,commit 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