本來覺得有 grep 幹嘛還要 ack,用了才知身為懶惰、無力調校 grep 的人,ack 裝備上去效率立刻提升,這 cheap 的感覺相當過癮。
Ack 的好
-
打的字比 grep 少:
grep foobar **/*.rb -ri --exclude-dir=.git
會變成
ack foobar --ruby
對我來說沒別的了,有興趣請見官網 Why ack。
快速完成設定
-
我選擇裝 standalone 版本,就是單純一支 perl script,不管什麼環境都長一樣。
依官網 ack: Installation 的 Install the ack executable 敘述,curl
一下就裝好了。 -
~/.ackrc
基本上是顯示格式、色彩的調整; 進階一點是設定檔案 type,譬如設了--type-set=log=.log
就可以下ack foobar --log
,只搜尋 *.log。
我的設定:--smart-case --no-heading --no-group --color-filename=magenta --color-lineno=green --color-match=bold\ red --type-set=log=.log --all-types
-
目錄 .ackrc
Ack 只吃一個全域 .ackrc,但要作到對「特定目錄」設定也是可能的,比如在 .zshrc 設定:
alias ack='noglob ack $([ -f ./.ackrc ] && tr "\n" " " < ./.ackrc) '
之後若在 rails app/ 目錄想忽略 vendor/ doc/ test/ 等,就在 app 目錄放個 .ackrc 把它們排除即可:--ignore-dir=vendor --ignore-dir=doc --ignore-dir=test --ignore-dir=tmp --ignore-dir=public/cache
Ack 的鳥
-
預設排除 *.min.js
見 Pull Request #142,看似體貼,其實難以接受,為什麼不能由 config 拿掉這個規則。
-
無法指定排除檔案
grep 的
--exclude
系列選項在 ack 不存在,無法簡易排除名為 *-src.js 的檔案。
只能等待 ack 2.0 改進了。