ack is an amazing tool. If you're not familiar with it,
it's a lot like grep (the official site is at beyondgrep.com).
It's a command-line tool that helps you find things in files, particularly source code.
However, like a lot of command-line tools, it's all-too-easy to learn just the
basics and forget that many of these tools can do so much more!
Without further ado, here are a few of the ways I frequently use
ack while working with Django.
It's so frustrating to search for a snippet of python code, only to have your screen fill up with irrelevant results (I'm looking at you migrations and css files!)
When this happens, just ignore the stuff you don't need:
While we're at it, you can also ignore specific files, or any file that matches a regex. Perhaps you're looking for reference to a Django model, but you don't need to know that it's in models.py, so just ignore that file!
ack --ignore-file=match:models.py SomeModel
Better, but you might also want to ignore that model.js file (or perhaps it's called model_views.js). You can do that with a simple regex! And while we're at it, lets go ahead and ignore any migrations:
ack --ignore-file=match:/^model/ --ignore-dir=migrations/ SomeModel
Just Python, please
ack also lets you restrict searches to specific file types:
ack --type=python SomeModel
There's also a shortcut for this:
ack --python SomeModel
Or ruby if you prefer:
ack --ruby 'def foo'
Similarly, you can tell ack to ignore any files that it doesn't understand with
ack -k SomeCode
To get a list of all the filetypes that
ack knows about, just run:
For some reason, I sometimes forget that default searches are case sensitive. If, like me, you're pronE tO TYpos, you can perform case insensitive searches with:
ack -i whatever
As you might have noticed,
ack comes with some default behavior.
You can inspect these defaults with:
Now, if you want to start customizing this behavior, create an
and tweak it to your heart's content. A good way to get started is to let ack generate
this file for you! (careful! this command will overwrite your
.ackrc file if you already have one.)
ack --create-ackrc > ~/.ackrc
Have some fun
ack developers are not without a sense of humor. Certainly
you should take the time to investigate all of the following:
There's so much more to
ack than what I've listed here.
Do yourself a favor and periodically skim the output of
then take some time to look through the manpage (