一个比ack速度快n倍的代码搜索工具: ag
一个比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(),基准测试每个版本以找到性能回归,并用gprof和Valgrind进行分析。
安装
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”。
从源头建造
建筑大师
安装依赖关系(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:这很复杂 看到这个维基页面。
运行构建脚本(它运行aclocal,automake等):
./build.sh
在Windows上(在msys / MinGW shell内):
make -f Makefile.w32
安装:
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的更多相关文章
- 一个强大的VS代码搜索工具
最近一直在寻找一款VS代码搜索插件,终于找到了一个不错的,仅支持vs2012以上. https://marketplace.visualstudio.com/items?itemName=mario- ...
- 记录一个在线压缩和还原压缩js代码的工具
packer – javascript 压缩工具 http://dean.edwards.name/packer/ Javascript Beautifier ---可以恢复某些压缩工具压缩的js代码 ...
- Dirty Markup - 在线代码美化工具
如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ...
- Code Index: 基于Lucene.Net的代码检索工具
目录 用途 Github地址 示例 特性 用途 维护一个拥有巨大代码量的项目, 依靠自带的代码搜索工具搜索速度缓慢, 一个快速的代码检索工具就显得极为必要, 所以自己撸了个小工具. Github地址 ...
- PayPal为什么从Java迁移到Node.js 性能提高一倍 文件代码减少44%
大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal 解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...
- 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研
想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...
- JSLint是一个JavaScript的代码质量工具
JSLint是一个JavaScript的代码质量工具 可能都或多或少的知道JSLint是一个JavaScript的代码质量工具,一个JavaScript语法检查器和校验器,它能分析JavaScript ...
- C#返回字符串的字节长度,一个中文算两个字符的代码
如下代码段是关于C#返回字符串的字节长度,一个中文算两个字符的代码. public static int GetLength(string str) { if (str.Length == 0) re ...
- excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理
excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理方法: 方案1:修改注册表 出现文本被截断的原因是SQL Server的导入导出为了确定数据表的字段 ...
随机推荐
- Linux文件与目录管理 - ls, cp, mv
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称 [root@www ~]# ls [--color={never,auto,always}] 目录名称 [root@www ...
- linux内核中的排序接口--sort函数
linux内核中的sort函数,其实跟我们所说的qsort函数很像,我们来看看qsort: qsort 的函数原型是 void qsort(void*base,size_t num,size_t wi ...
- 从零开始搭建基于CEFGlue的CB/S的winform项目
基于CEF,用.net包装过的Xilium.CefGlue/3,基于此框架可以很方便在你的winform等C/S项目中搭建一个内建的浏览器 Chromium Embedded Framework (C ...
- canvas元素
一.canvas元素的基础知识 canvas元素是html5中新增的一个重要的元素,专门用来绘制图形.在页面上放置了一个canvas元素,就相当于在页面上放置了一块"画布",可以在 ...
- 深入了解Map
联系 Java中的Map类似于OC的Dictionary,都是一个个键值对组成,一键对应一值.我在之前的文章中讲解过Set,其实在JAVA底层Set依赖的也是Map,那我们都知道,Set是单列的(只有 ...
- Python-网站页面代码获取
Python3.6 库:urllib3, bs4 主程序是抓取亚马逊图书销售排名数据,但是亚马逊应该是加了反爬虫,拒绝疑似机器人的请求,这部分暂时以百度代替. 其实简单的页面抓取,常用的urllib. ...
- php添加日志文件
记录一下. 有时候写测试代码的时候,不习惯直接在屏幕上输出反馈,那么可以配置日志文件,把需要输出的内容追加到日志文件里面,就很方便. Php自带日志系统,可以参考网上的博客配置. 我要说的是,如果你的 ...
- 拾人牙慧篇之———QQ微信的第三方登录实现
一.写在前面 关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了.我只能保证我的这个是我实现 ...
- tomcat项目绑定到域名及运行内存配置
一.tomcat中的项目绑定到域名通过域名访问 1.在tomcat下的conf/server.xml中找到Host修改(1.name为你的域名,2.配置Context中的path为空就是直接访问项目不 ...
- AE、AS调用时用代码提供许可(不需要添加LicenseControl控件)
private void CheckBindLicense() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDe ...