My favorite commandline tool for efficiently searching a codebase is Ack. It shows file:line and highlights the matches in the output. When refactoring a solution it is a trusty companion to quickly find all uses of a method, for instance.

It is easy to install with DarwinPorts:

sudo port install p5-app-ack

This puts the ack command in your PATH and you’re ready to go.

Basic usage of Ack

A recurring task is to find all uses of a method or class in a project. As this is simply a substring search, you invoke Ack with:

ack inconvenience_late_payers

and ack quickly starts outputting all the places where this is used. If you add a -i, the search becomes case-insensitive. Use ack --help to see all the many available options.

A bit of configuration goes a long way

Ack is fast because it skips uninteresting files. It is meant for searching for text, and skips version control folders, logfiles, images, and a lot of other stuff you are not interested in when searching through your source-code. However, the backside is you need to configure things once to have support for all your various kinds of source-code.

Adding this small bit of config means .haml, .sass, and Cucumber .feature files are also included when searching.

--type-set=haml=.haml
--type-set=sass=.sass
--type-set=cucumber=.feature

With this in place, you are ready to rock HAML/SSS + Cucumber projects.

Know any extra must-have options or shortcuts I have left out?

Update: added link to official Ack homepage.