• 一个比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的实用程序。它从搜索和打开匹配文件中删除了很多重复。
  • 相关阅读:
    java int转byte数组
    业务网关-操作手册
    业务网关-配置
    H2数据库的导入、导出(CSV)
    sequelize踩坑处理:时间格式化
    引入koa-static处理静态资源
    MySql利用case when实现批量更新多条记录的不同值实现方法
    Sequelize增删改查及批量新增或批量更新(bulkCreate的updateOnDuplicate)等常用接口
    数据结构队列、双端队列、队列系算法题解析
    配置webpack中externals来减少打包后vendor.js的体积
  • 原文地址:https://www.cnblogs.com/sunsky303/p/6999800.html
Copyright © 2020-2023  润新知