rg vs ag?

我似乎有挑起战争之嫌,不过我是真心想问问,如果只能选择一种grep,我该用哪个……

我的需求是准确第一,速度第二,同时我不搜索中文以及其它语言。另外需要主流平台(Win, Mac, Linux主流发行版)都有便捷的安装方式 (最好是官方源自带,Mac的话homebrew也算)。

以及ripgrep现在还有什么比较大的限制 / bug没?很心水它的feature啊……就是担心只用ripgrep会出什么问题不会。

1 个赞

平时用rg感觉很好,功能也很全,不过我没用过ag可能没资格评论。

两者都用,平时用rg,搜索中文的时候用ag,貌似rg搜索中文要指定coding?那多麻烦了

好吧……我一般不搜索中文

之前发现ag对.gitignore文件处理有bug,上报了很久没有解决,好像开发不是很活跃了, 换成了rg,用着不错

选rg没错,ag效率不如rg。

可以看这一篇 blog : ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant's Blog , 它对比了 grep 、ack 、 ag 、rg

最下面也有各个场景的基准测试,不过是两年前的,不知道现在是否还正确了。

1 个赞

我就想问问现在用rg作为Emacs的唯一grep程序(没有ag,ack,pt等fallback)还有什么问题没?(当然还是有GNU Grep这个fallback)

我不想使用fallback的原因就是我喜欢一类工具只留一个,这也是我之前为啥要发那个你们是否会强迫自己使用Emacs的原因。

以及我会对rg存有疑问是因为rg的面向行特性……

没啥大问题 速度很快 配合counsel食用更佳

现在唯一的问题就是xref-js2需要ag……

中文相关的问题这里已有讨论: 对于搜索中文,rg > grep > ag/ack?

不知这些搜索工具,哪个支持 ignore 规则叠加的。

以 ag 为例,它支持 .gitignore 很好,不过有时候「需要追踪」的文件,跟「需要搜索」的文件并不相等。在我的 emacs.d 里,有个 private 文件夹,专门存放涉及个人邮箱/公司地址…等等信息的 snippet/函数/脚本,我并不想把它们纳入版本管理,但是希望可以搜索到。

所以,如果有个搜索工具,它即支持 .gitignore 把 git 管理的文件纳入,又可以有自己的 ignore file,把 git 排除的某些文件也纳入搜索,就完美了。

1 个赞
所以,如果有个搜索工具,它即支持 .gitignore 把 git 管理的文件纳入,又可以有自己的 ignore file,把 git 排除的某些文件也纳入搜索,就完美了。

这个rg可以使用.rgignore来设置忽略的文件。

把 git 排除的某些文件也纳入搜索,就完美了。

这个我在emacs中也不是问题,因为rg自已有–no-ignore选项。所以在emacs中使用rg包,或者是最近论坛里发的color-rg,都可以在搜索时一键切换是否搜ignore的内容,切换搜索目录等等功能。我觉得应该可以解决这个问题。

要的是叠加效果:.gitignore 为主90(%规则),XXignore 为辅助(10%规则),并不是想要两个 90% 内容相同的 ignore file。

不局限于 emacs 配置代码,只是举例子。

现在对我来说,唯一的问题就在于xref-js2了……

手动魔改里面的path 从ag改到rg不就好了

去看了一下手册 ripgrep/GUIDE.md at master · BurntSushi/ripgrep · GitHub 确实有说支持,但实测并没有效果,也需我用的版本比较旧。

另外要告诉你个事实:

论坛的帖子&回复都是软删除,也就是说,删除并不能节省存储空间,反而给 deleted_at 字段填上了日期,原本这个字段是空的。

不知这会减少/增加你的焦虑感?

1 个赞

我稍微看了一下xref-js2的实现,发现要改的地方还真不少……

我不想用dump-jump的原因就是支持的语言多……

最后还是决定用ripgrep了……因为速度差距太明显……

rg 功能多点,速度快一点,但怎么比 ag 大那么多?

47%20PM