When using Vim, and given a directory filled with code (e.g. ~/trunk/) with a number of sub-directories, is there a way to grep/search for instances of text/regexes across the entire source code?

At the moment I use:

:lcd ~/trunk
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py

(Obviously I'm limiting this to Python files, which is a different issue, but it's noteworthy that ideally I'd like to limit the searches to files with specific extensions.)

Edit
Report