Written by Sean Behan on Fri Oct 18th 2013

Here is the snippet

f path/to/directory 'search string' | open_in_mate

This snippet (technically 2 snippets) will recursively scan the contents of files in a directory and then open all the files it finds in Textmate.

It's useful on large projects where you would otherwise use a "find in project" feature.

However, what's useful about the snippet is that it let's me narrow my search very quickly.

Typically, I'll start w/ a broad search term...

f path/to/dir "something"

And I'll then narrow it down...

f path/to/dir "something more specific"

From the command line I can just hit the up arrow or "ctl+p" so I can very quickly refine what I'm looking for very doing.

The "f" command is just an alias around ACK. I inverted the argument order so that I can hit "ctl+w" to erase the search term without having to retype the path.

# in ~/.bash_profile
function f { ack -i "$2" "$1"; }

Then when I feel like I have found what I'm looking for, I'll pipe it to a little script I wrote


The open_in_mate script will extract file paths from a blob of text and then runs the mate command, which opens up the file in Textmate if it exists.

data = ''
while $stdin.gets
    data << $_

data.scan(/^(app.*.(erb|rb|coffee|js|css|scss))/i).each do |f|
    f = f[0]
    if File.exists?(f)
        `mate #{f}`

Note that I'm only looking for certain file type in a Rails app. You could make it more generic if needed.

Tagged with..
#Command Line #Snippets #Textmate #ACK #Ruby #Rails

Just finishing up brewing up some fresh ground comments...