I use locate or grep or find combined with grep.
locate -- When I really have no idea where I stored that stuff,
locate "some keywords"
I'm pretty sure that the locate database is kept up-to-date
automatically. But, you might have to update it manually by
$ sudo updatedb.mlocate
When I believe that what I'm looking for is in a subdirectory of a
known directory, then I use find plus xargs plus grep:
$ find * -iname 'somefilepat*' | xargs grep "some text pattern"
I have a bash alias for find:
$ alias ff
alias ff='find * -iname'
Which enables me to shorten that to:
$ ff 'somefilepat*' | xargs grep "some text pattern"
When I'm sure that the file I'm looking for is in a specific
(current) directory, plain old grep is usually enough. But, I
really should get more familiar with vimgrep.
I often pipe the results of grep into vim:
$ ff 'file_pat*' | xargs grep "text pat" | vim -R -
And, then (in vim) I can use Ctrl-w g f to open some file
The following bash alias enables me to shorten that a bit also:
$ alias vv
alias vv='vim -R -'
$ ff 'file_pat*' | xargs grep "text pat" | vv