前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个比ack速度快n倍的代码搜索工具: ag

一个比ack速度快n倍的代码搜索工具: ag

作者头像
sunsky
发布2020-08-20 10:06:26
8690
发布2020-08-20 10:06:26
举报
文章被收录于专栏:sunskysunsky

一个比ack速度快n倍的代码搜索工具: ag

银搜索者(The Silver Searcher)

一个类似于代码搜索工具ack,着重于速度。

Github: https://github.com/ggreer/the_silver_searcher

Ag有什么好处?

  • 它比一个数量级快ack
  • 它忽略了你.gitignore和你的文件模式.hgignore
  • 如果您的源代码中有文件您不想搜索,只需将其模式添加到.ignore文件中即可。(*咳嗽* *.min.js*咳嗽*)
  • 命令名称比起第33行短ack,所有的键都在主排上!

Ag现在相当稳定 大多数更改是新功能,小错误修复或性能改进。比我的基准要快得多:

代码语言:javascript
复制
ack test_blah ~/code/  104.66s user 4.82s system 99% cpu 1:50.03 total

ag test_blah ~/code/  4.67s user 4.58s system 286% cpu 3.227 total

Ack和Ag发现了相同的结果,但是Ag的速度是34倍(3.2秒vs 110秒)。我的~/code目录是大约8GB。感谢git / hg / ignore,Ag只搜索了700MB。

还有各版本的性能图表

怎么这么快?

  • Ag使用Pthreads并行利用多个CPU内核和搜索文件。
  • 文件被mmap()编辑而不是读入缓冲区。
  • 文字字符串搜索使用Boyer-Moore strstr
  • 正则表达式搜索使用PCRE的JIT编译器(如果Ag使用PCRE> = 8.21构建)。
  • pcre_study()在每个文件执行相同的正则表达式之前,Ag调用它。
  • 而不是调用fnmatch()忽略文件中的每个模式,非正则表达式模式将加载到数组中并进行二进制搜索。

我写了几篇博客文章,显示了我如何改进性能。这些包括我如何添加pthreads写我自己的scandir()基准测试每个版本以找到性能回归,并用gprofValgrind进行分析

安装

MACOS

代码语言:javascript
复制
brew install the_silver_searcher

要么

代码语言:javascript
复制
port install the_silver_searcher

Linux的

  • Ubuntu> = 13.10(Saucy)或Debian> = 8(Jessie) apt-get install silversearcher-ag
  • Fedora 21及以下 yum install the_silver_searcher
  • Fedora 22+ dnf install the_silver_searcher
  • RHEL7 + yum install epel-release.noarch the_silver_searcher
  • Gentoo的 emerge the_silver_searcher
  • 拱 pacman -S the_silver_searcher
  • Slackware的 sbopkg -i the_silver_searcher
  • openSUSE的: zypper install the_silver_searcher
  • CentOS的: yum install the_silver_searcher
  • SUSE Linux Enterprise:按照这些简单说明进行操作

BSD

  • FreeBSD的 pkg install the_silver_searcher
  • OpenBSD系统/ NetBSD的 pkg_add the_silver_searcher

Cygwin的

运行相关的setup-*.exe,并在“Utils”类别中选择“the_silver_searcher”。

从源头建造

建筑大师

  1. 安装依赖关系(Automake,pkg-config,PCRE,LZMA):
    • MacOS的: brew install automake pkg-config pcre xz 要么 port install automake pkgconfig pcre xz
    • Ubuntu的/ Debian的: apt-get install -y automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev
    • Fedora的: yum -y install pkgconfig automake gcc zlib-devel pcre-devel xz-devel
    • CentOS的: yum -y groupinstall "Development Tools" yum -y install pcre-devel xz-devel
    • openSUSE的: zypper source-install --build-deps-only the_silver_searcher
    • Windows:这很复杂 看到这个维基页面
  2. 运行构建脚本(它运行aclocal,automake等): ./build.sh

在Windows上(在msys / MinGW shell内):

代码语言:javascript
复制
    make -f Makefile.w32
  1. 安装: sudo make install

建立释放tarball

GPG签名的版本可在这里

构建版本tarball需要相同的依赖关系,除了automake和pkg-config。安装依赖项后,只需运行:

代码语言:javascript
复制
./configure
make
make install

您可能需要以sudoroot身份使用或运行make install。

编辑器集成

VIM

您可以使用Ag与[ack.vim] []添加以下行到您的.vimrc

代码语言:javascript
复制
let g:ackprg = 'ag --nogroup --nocolor --column'

要么:

代码语言:javascript
复制
let g:ackprg = 'ag --vimgrep'

哪个有同样的效果,但会报告每一场比赛。

Emacs的

您可以使用ag.el作为Ag的Emacs前端。参见:helm-ag

TextMate的

TextMate用户可以使用Ag与流行的AckMate插件的分支,这可以让您同时使用Ack和Ag进行搜索。如果您已经有AckMate,您只需要用Ag替换Ack,移动或删除"~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack"并运行ln -s /usr/local/bin/ag "~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack"

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一个比ack速度快n倍的代码搜索工具: ag
    • 银搜索者(The Silver Searcher)
      • Ag有什么好处?
        • 怎么这么快?
          • 安装
            • MACOS
            • Linux的
            • BSD
            • Cygwin的
          • 从源头建造
            • 建筑大师
            • 建立释放tarball
          • 编辑器集成
            • VIM
            • Emacs的
            • TextMate的
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档