首页 > 代码库 > Ag (the_silver_searcher) 安装使用

Ag (the_silver_searcher) 安装使用

if (I am a Programmer || I have a strong sense of time) I use ag


1. 安装命令行ag(代码中行首的“\”是多余的)

\#!/usr/bin/env bash
\#Author Leslie Guan
\#make sure you have the root permission
\#Usage . install_ag.sh
set -x
TEMP_DIR=$(mktemp -d Leslie.Guan.XXXXXX)
cd ${TEMP_DIR}
wget https://github.com/ggreer/the_silver_searcher/archive/master.zip
TAR_DIR=$(unzip *.zip)
TAR_DIR=${TAR_DIR%%/*}
TAR_DIR=${TAR_DIR##*:}
cd ${TAR_DIR}
apt-get install -y automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev --force-yes
./build.sh && make install
cd ../../
rm -rf ${TEMP_DIR}
ag -V
set +x

ubuntu13.10以后可以直接运行

apt-get install silversearcher-ag
ag_GitHub

2. 安装Vim插件(必须先安装ag命令行工具)(代码中行首的“\”是多余的)

\#!/usr/bin/env bash
\#Author Leslie Guan
\#make sure you have the root permission
\#Usage . install_Ag4Vim.sh
set -x
TEMP_DIR=$(mktemp -d Leslie.Guan.XXXXXX)
cd ${TEMP_DIR}
wget https://github.com/rking/ag.vim/archive/master.zip
TAR_DIR=$(unzip *.zip)
TAR_DIR=${TAR_DIR%%/*}
TAR_DIR=${TAR_DIR##*:}
cd ${TAR_DIR}
cp cp {plugin,autoload,doc} /usr/share/vim/vim73/ -rf 
cd ../../
rm -rf ${TEMP_DIR}
set +x

ag.vim_GitHub

3. 使用

命令行使用

ag HelloWorld
ag HelloWorld path/to/search

Ag HelloWorld
Ag HelloWorld path/to/search
在Ag查找出来的quickfix窗口中,你可以使用下列命令:
e    to open file and close the quickfix window
o    to open (same as enter)
go   to preview file (open but maintain focus on ag.vim results)
t    to open in new tab
T    to open in new tab silently
h    to open in horizontal split
H    to open in horizontal split silently
v    to open in vertical split
gv   to open in vertical split silently
q    to close the quickfix window

详细使用方法请查看帮助:

man ag

4. 对比

速度对比ag>ack>grep

在android全部源码中查找(测试环境20线程32GB内存):

time ag -i activity
real    2m42.568s
user    0m16.049s
sys 1m29.358s
time ack -i activity
real    5m17.780s
user    1m35.830s
sys 0m17.521s
time grep -Hrni activity .

What‘s so great about Ag?

It searches code about 3–5× faster than ack.
It ignores file patterns from your .gitignore and .hgignore.
If there are files in your source repo you don‘t want to search, just add their patterns to a .agignore file. *cough* extern *cough*
The command name is 33% shorter than ack!