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

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

銀搜索者(The Silver Searcher)

一個相似於代碼搜索工具ack,着重於速度。html

 Github:   https://github.com/ggreer/the_silver_searcher前端

Ag有什麼好處?

  • 它比一個數量級快ack
  • 它忽略了你.gitignore你的文件模式.hgignore
  • 若是您的源代碼中有文件您不想搜索,只需將其模式添加到.ignore文件中便可。(*咳嗽* *.min.js*咳嗽*)
  • 命令名稱比起第33行短ack,全部的鍵都在主排上!

Ag如今至關穩定 大多數更改是新功能,小錯誤修復或性能改進。比個人基準要快得多:linux

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。git

還有各版本的性能圖表github

怎麼這麼快?

  • 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

要麼shell

port install the_silver_searcher

Linux的

  • Ubuntu> = 13.10(Saucy)或Debian> = 8(Jessie)macos

    apt-get install silversearcher-ag
  • Fedora 21及如下vim

    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的實用程序。它從搜索和打開匹配文件中刪除了不少重複。
相關文章
相關標籤/搜索