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.shset -xTEMP_DIR=$(mktemp -d Leslie.Guan.XXXXXX)cd ${TEMP_DIR}wget https://github.com/ggreer/the_silver_searcher/archive/master.zipTAR_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 installcd ../../rm -rf ${TEMP_DIR}ag -Vset +x
ubuntu13.10以后可以直接运行
apt-get install silversearcher-ag
2. 安装Vim插件(必须先安装ag命令行工具)(代码中行首的“\”是多余的)
\#!/usr/bin/env bash\#Author Leslie Guan\#make sure you have the root permission\#Usage . install_Ag4Vim.shset -xTEMP_DIR=$(mktemp -d Leslie.Guan.XXXXXX)cd ${TEMP_DIR}wget https://github.com/rking/ag.vim/archive/master.zipTAR_DIR=$(unzip *.zip)TAR_DIR=${TAR_DIR%%/*}TAR_DIR=${TAR_DIR##*:}cd ${TAR_DIR}cp cp {plugin,autoload,doc} /usr/share/vim/vimcurrent/ -rf cd ../../rm -rf ${TEMP_DIR} set +x
3. 使用
命令行使用
ag HelloWorldag HelloWorld path/to/search
Ag HelloWorldAg HelloWorld path/to/search
在Ag查找出来的quickfix窗口中,你可以使用下列命令:
e to open file and close the quickfix windowo to open (same as enter)go to preview file (open but maintain focus on ag.vim results)t to open in new tabT to open in new tab silentlyh to open in horizontal splitH to open in horizontal split silentlyv to open in vertical splitgv to open in vertical split silentlyq to close the quickfix window
详细使用方法请查看帮助:
man ag
4. Why ag
速度对比ag>ack>grep
在android全部源码中查找(测试环境20线程32GB内存):
time ag -i activityreal 2m42.568suser 0m16.049ssys 1m29.358s
time ack -i activityreal 5m17.780suser 1m35.830ssys 0m17.521s
time grep -Hrni activity .real 49m27.518suser 43m13.918ssys 0m38.178s
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!