Awesome
ggreer/the_silver_searcher
<!-- [![size-img]][size] -->「 类似ack
的代码搜索工具,专注于速度. 」
校对 ✅
<!-- doc-templite START generated --> <!-- repo = 'ggreer/the_silver_searcher' --> <!-- commit = '1b06a9fd8d9ad0aaf235b4a752e605dfd4bb7ced' --> <!-- time = '2018-11-27' -->翻译的原文 | 与日期 | 最新更新 | 更多 |
---|---|---|---|
commit | ⏰ 2018-11-27 | 中文翻译 |
贡献
欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看
生活
If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰
银色搜索者(The Silver Searcher)
类似ack
的代码搜索工具,专注于速度.
你知道 C 吗?想改善 ag?我邀请你和我一起合作.
Ag 的优点是什么?
- 它比
ack
快一个数量级. - 它忽略了你的文件,匹配
.gitignore
和.hgignore
中模式. - 如果源仓库中有文件您不想搜索,只需将其模式添加到一个
.ignore
文件.(咳哼*.min.js
之类) - 命令参数名称比
ack
缩短了 33%,所有关键都整齐摆在首排!
Ag 现在相当稳定。大多数更改都是新功能,小错误修复或性能改进。在我的基准测试中它比 Ack 快得多:
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 秒对 110 秒)。我的~/code
目录大约是 8GB。感谢 git/hg/ignore, Ag 只搜索了 700MB.
还有各版本的性能图表.
怎么这么快?
- Ag 使用Pthreads-并行线程,利用多个 CPU 核心并行搜索文件.
- 文件是
mmap()
,而不是读入 buffer(缓冲区). - 文字字符串搜索使用Boyer-Moore strstr.
- 正则表达式搜索使用PCRE 的 JIT 编译器(如果 Ag 是用 PCRE >=8.21 构建的).
- Ag 在每个文件上执行相同的正则表达式之前,调用
pcre_study()
. - 换成在忽略文件中的每个模式上,调用
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 -a sys-apps/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
Windows
-
Win32/64
非官方的日常构建是可得到.
-
Chocolatey
choco install ag
- MSYS2
pacman -S mingw-w64-{i686,x86_64}-ag
-
Cygwin
运行相关的
setup-*.exe
,并选择"_银_搜索者"在"Utils"类别中.
从源头构建
构建主分支
- 安装依赖项(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 zlib-devel
- openSUSE:
zypper source-install --build-deps-only the_silver_searcher
- Windows: 这很复杂。看到这个维基页面.
- 运行构建脚本(只运行 aclocal,automake 等):
./build.sh
在 Windows 上(在 msys/MinGW shell 中):
make -f Makefile.w32
- 安装:
sudo make install
构建一个发布的压缩(二进制)文件
可以使用 GPG 签名的版本,在这里.
构建发行版 tar 包需要相同的依赖项,但 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 用户可以通过我的叉子-流行的 AckMate 插件使用 Ag,它允许您使用 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"