一个比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现在相当稳定 大多数更改是新功能,小错误修复或性能改进。比我的基准要快得多:

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

brew install the_silver_searcher

要么

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内):

    make -f Makefile.w32
  1. 安装:

     sudo make install

建立释放tarball

GPG签名的版本可在这里

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

./configure
make
make install

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

编辑器集成

VIM

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

let g:ackprg = 'ag --nogroup --nocolor --column'

要么:

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"

你可能会喜欢的其他东西

  • Ack - 比grep好。没有Ack,Ag不会存在。
  • ack.vim
  • 丰富的Ctags - 比Ag快,但它预先构建了一个索引。对于真正的大代码库很好
  • Git-grep - 与Ag一样快,但只适用于git repos。
  • ripgrep
  • Sack - 包裹Ack和Ag的实用程序。它从搜索和打开匹配文件中删除了很多重复。

一个比ack速度快n倍的代码搜索工具: ag的更多相关文章

  1. 一个强大的VS代码搜索工具

    最近一直在寻找一款VS代码搜索插件,终于找到了一个不错的,仅支持vs2012以上. https://marketplace.visualstudio.com/items?itemName=mario- ...

  2. 记录一个在线压缩和还原压缩js代码的工具

    packer – javascript 压缩工具 http://dean.edwards.name/packer/ Javascript Beautifier ---可以恢复某些压缩工具压缩的js代码 ...

  3. Dirty Markup - 在线代码美化工具

    如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ...

  4. Code Index: 基于Lucene.Net的代码检索工具

    目录 用途 Github地址 示例 特性 用途 维护一个拥有巨大代码量的项目, 依靠自带的代码搜索工具搜索速度缓慢, 一个快速的代码检索工具就显得极为必要, 所以自己撸了个小工具. Github地址 ...

  5. PayPal为什么从Java迁移到Node.js 性能提高一倍 文件代码减少44%

    大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...

  6. 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研

    想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...

  7. JSLint是一个JavaScript的代码质量工具

    JSLint是一个JavaScript的代码质量工具 可能都或多或少的知道JSLint是一个JavaScript的代码质量工具,一个JavaScript语法检查器和校验器,它能分析JavaScript ...

  8. C#返回字符串的字节长度,一个中文算两个字符的代码

    如下代码段是关于C#返回字符串的字节长度,一个中文算两个字符的代码. public static int GetLength(string str) { if (str.Length == 0) re ...

  9. excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理

    excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理方法: 方案1:修改注册表 出现文本被截断的原因是SQL Server的导入导出为了确定数据表的字段 ...

随机推荐

  1. ubuntu 的挂起与休眠

    待机 计算机将目前的运行状态等数据存放在内存,关闭硬盘.外设等设备,进入等待状态.此时内存仍然需要电力维持其数据,但整机耗电很少.恢复时计算机从内存读 出数据,回到挂起前的状态,恢复速度较快.一般笔记 ...

  2. 实战:通过ViewModel规范TableView界面开发

    TableView界面可以说是移动App中最常用的界面之一了,物品/消息列表.详情编辑.属性设置--几乎每个app都可以看到它的身影.如何优美地实现一个TableView界面,就成了iOS开发者的必备 ...

  3. 前端开发我为什么选择cordova

    cordova与phonegap有什么关系? phoengap 官方网址:http://phonegap.com 如果能了解一个框架的兴起还是一件比较有趣的事.08年一次ios开发者大会上来自Nito ...

  4. gdb中的define命令

    可以使用define命令达到类似于display的效果:比如每ni后显示当前5条指令: define s5 ni x/5i $pc end 甚至可以手动传入要显示指令的条数: define s ni ...

  5. 软件开发顶尖高手的杀手锏SQL语句

                  软件开发顶尖高手的杀手锏SQL语句                                                                     ...

  6. Emmet之html语法

    一.简写语法 Emmet 用和 CSS 选择器相似的语法来描述元素的嵌套层级关系和属性,实现 HTML/XML/CSS 等代码的智能自动补全. 其通过文件名后缀识别文件类型,从而使用对应的自动补全语法 ...

  7. time元素与微格式/pubdate属性

    首先来说下微格式,它是一种利用HTML的class属性来对网页添加诸如新闻事件发生的日期和时间.个人电话号码.企业邮箱之类的附加信息方法. time元素代表24小时中的某个时刻或某个日期,表示时刻时允 ...

  8. html5中的全局属性

    在html5中,新增了一个"全局属性"的概念,所谓全局属性,是指可以对任何属性都使用的属性.下面列出常用的全局属性. 1.contentEditable属性,是微软开发的,该属性主 ...

  9. (function(){xxx})(); 写法解释

    常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿 ...

  10. 工作中EF遇到的问题

    EF的条件中,无法用转格式,时间差作为条件,这时在EF6中,可以用 DbFunctions 这个类,例如: db.NewsComments.Any( (entity.PostDate -  p.Pos ...