zoukankan      html  css  js  c++  java
  • 一个比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()基准测试每个版本以找到性能回归,并用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的实用程序。它从搜索和打开匹配文件中删除了很多重复。
  • 相关阅读:
    codevs 2632 非常好友
    codevs 1213 解的个数
    codevs 2751 军训分批
    codevs 1519 过路费
    codevs 1503 愚蠢的宠物
    codevs 2639 约会计划
    codevs 3369 膜拜
    codevs 3135 River Hopscotch
    数论模板
    JXOJ 9.7 NOIP 放松模拟赛 总结
  • 原文地址:https://www.cnblogs.com/sunsky303/p/6999800.html
Copyright © 2011-2022 走看看