首页 > 其他分享 >一个比ack速度快n倍的代码搜索工具: ag

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

时间:2022-12-20 10:02:25浏览次数:65  
标签:ag Ag ack 搜索 install silver

一个比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

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
  1. 运行构建脚本(它运行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

您可能需要以​​sudo​​root身份使用或运行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"​

你可能会喜欢的其他东西

作者:​​sunsky303​​​



标签:ag,Ag,ack,搜索,install,silver
From: https://blog.51cto.com/u_15715098/5954176

相关文章

  • DataGrip导出数据库sql文件
    选中一个数据库中指定数据表,然后单击右键,选择Exportwithmysqldump如果显示如图所示错误(路径不存在),则在终端里输入whichmysqldump,然后去替代默认路径即可。......
  • Pragmas Accepted by GCC
    先说下微软的。有disable,但没有enable,有的是default:Resetwarningbehaviortoitsdefaultvalue.BitBlt有SRCAND,没有SRCOR,useSRCPAINTinstead.warningpragma......
  • swagger
    1、依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</ve......
  • [深度学习] ImageAI库使用笔记
    dates:2020-08-0713:31:38+0800tags:-深度学习-PythonImageAI是一个Python库,旨在使开发人员,研究人员和学生能够使用简单的几行代码来构建具有独立的深度学习......
  • 【221219-5】等腰Rt三角形ABC中,AB=AC,D为AC中点,连BD,E为BD上一点,且角EAB=角EBA=α,延长AE
    ......
  • [深度学习] ImageAI库使用笔记
    dates:2020-08-0713:31:38+0800tags:-深度学习-PythonImageAI是一个Python库,旨在使开发人员,研究人员和学生能够使用简单的几行代码来构建具有独立的深度学习......
  • percona-xtrabackup物理备份mysql
    wgethttps://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm安装xtrabackup[......
  • MessageBox.Show()用法总结
    名称(具有相同的返回值 DialogResult)说明​​MessageBox.Show(String)​​显示具有指定文本的消息框。由.NETCompactFramework支持。​​MessageBox.Show(IWin32Wind......
  • C# dataGridView常用功能
     1.鼠标选中一行删除此行: foreach(DataGridViewRowrindGView_countList.SelectedRows)       {        if(!r.IsNewRow)   ......
  • HQL: The Hibernate Query Language
    Chapter 14. HQL:TheHibernateQueryLanguage​​14.1.CaseSensitivity​​​​​​14.2.Thefromclause​​​​​​14.3.Associationsandjoins​​​​​......