the_silver_searcher README

The project's README from github.com/ggreer/the_silver_searcher. As one markdown file: README.md.

The Silver Searcher

A code searching tool similar to ack, with a focus on speed.

Build Status

Floobits Status

#ag on Freenode

Do you know C? Want to improve ag? I invite you to pair with me.

What's so great about Ag?

Ag is quite stable now. Most changes are new features, minor bug fixes, or performance improvements. It's much faster than Ack in my benchmarks:

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 and Ag found the same results, but Ag was 34x faster (3.2 seconds vs 110 seconds). My ~/code directory is about 8GB. Thanks to git/hg/ignore, Ag only searched 700MB of that.

There are also graphs of performance across releases.

How is it so fast?

I've written several blog posts showing how I've improved performance. These include how I added pthreads, wrote my own scandir(), benchmarked every revision to find performance regressions, and profiled with gprof and Valgrind.

Installing

macOS

brew install the_silver_searcher

or

port install the_silver_searcher

Linux

BSD

Windows

Building from source

Building master

  1. Install dependencies (Automake, pkg-config, PCRE, LZMA):

    • macOS:

        brew install automake pkg-config pcre xz
      

      or

        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 zlib-devel
      
    • openSUSE:

        zypper source-install --build-deps-only the_silver_searcher
      
    • Windows: It's complicated. See this wiki page.

  2. Run the build script (which just runs aclocal, automake, etc):

     ./build.sh
    

    On Windows (inside an msys/MinGW shell):

     make -f Makefile.w32
    
  3. Make install:

     sudo make install
    

Building a release tarball

GPG-signed releases are available here.

Building release tarballs requires the same dependencies, except for automake and pkg-config. Once you've installed the dependencies, just run:

./configure
make
make install

You may need to use sudo or run as root for the make install.

Editor Integration

Vim

You can use Ag with ack.vim by adding the following line to your .vimrc:

let g:ackprg = 'ag --nogroup --nocolor --column'

or:

let g:ackprg = 'ag --vimgrep'

Which has the same effect but will report every match on the line.

Emacs

You can use ag.el as an Emacs front-end to Ag. See also: helm-ag.

TextMate

TextMate users can use Ag with my fork of the popular AckMate plugin, which lets you use both Ack and Ag for searching. If you already have AckMate you just want to replace Ack with Ag, move or delete "~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack" and run ln -s /usr/local/bin/ag "~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack"

Other stuff you might like

the_silver_searcher (ggreer/the_silver_searcher)

Searching Database…

Что это?The Silver Searcher (ag) — это инструмент для поиска по коду в командной строке, похожий на ack, но созданный в первую очередь ради скорости.
Это замена grep или что-то другое?Это инструмент текстового поиска в стиле grep/ack, специально заточенный под поиск по исходному коду: он автоматически пропускает файлы, которые игнорируются через .gitignore/.hgignore, а дополнительные шаблоны можно добавить в файл .ignore.
Как установить ag?Используйте менеджер пакетов вашей платформы: 'brew install thesilversearcher' на macOS, 'apt-get install silversearcher-ag' на Ubuntu/Debian, 'pacman -S thesilversearcher' на Arch или 'winget install "The Silver Searcher"' / Chocolatey на Windows. Также можно собрать из исходников: ./build.sh, а затем sudo make install.
Официально ли поддерживается сборка для Windows?Поддержка Windows опирается на неофициальные ежедневные сборки, пакеты winget/Chocolatey/MSYS2/Cygwin, а сборка из исходников под Windows описана как сложная.
Работает ли это и на BSD, а не только на Linux и macOS?Да, для FreeBSD и OpenBSD/NetBSD есть отдельные инструкции по установке через pkg install или pkgadd.
Чем ag достигает большей скорости по сравнению с ack?Он использует Pthreads для параллельного поиска по файлам на разных ядрах процессора, применяет mmap() вместо чтения файлов в буферы, использует алгоритм Boyer-Moore strstr для поиска точной строки и задействует JIT-компилятор PCRE для регулярных выражений (при сборке с PCRE >=8.21).
Насколько ag быстрее ack на практике?В бенчмарке автора на каталоге с кодом объёмом 8 ГБ ag оказался примерно в 34 раза быстрее ack (3,2 секунды против 110 секунд).
Можно ли использовать ag внутри Vim или Emacs?Да: пользователи Vim могут подключить ag к ack.vim через настройку g:ackprg, а пользователи Emacs могут использовать интерфейсы ag.el или helm-ag.
Стоит ли вместо ag использовать что-то вроде ripgrep или git-grep?В самом README перечислены похожие варианты, которые стоит сравнить: Git-grep (так же быстрый, но работает только в git-репозиториях), Exuberant Ctags (быстрее, но нужен заранее построенный индекс), ripgrep и Sack (обёртка над Ack и Ag).
What are similar projects?fff, numba, zenc, ripgrep, fzf.vim, neomacs, fzf, nnn
Which topics is it in?fzf, grep, emacs, speed, code-search, parallel, jit, vim, search, bsd, c, performance
Creator
ggreer
Size
2.4 MB
Stars
27.1K
Updated
CommitDec 17
Age
14y
Commits · 90 Days