本來覺得有 grep 幹嘛還要 ack,用了才知身為懶惰、無力調校 grep 的人,ack 裝備上去效率立刻提升,這 cheap 的感覺相當過癮。

Ack 的好

  1. 打的字比 grep 少:
    grep foobar **/*.rb -ri --exclude-dir=.git 會變成
    ack foobar --ruby

對我來說沒別的了,有興趣請見官網 Why ack

快速完成設定

  • 我選擇裝 standalone 版本,就是單純一支 perl script,不管什麼環境都長一樣。
    依官網 ack: InstallationInstall 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 改進了。