Emacs grep and grep-find command used to work great for me until I started working with SVN and all those .svn directories started popping up in my emacs grep searches…
So how can we make the emacs grep-find
command ignore all the .svn directories?
Being mostly a “git” guy, and having been recently introduced to SVN I found myself amazed — at frist, and then subsequently quite annoyed — by the fact that SVN sprinkles the entire project with countless .svn directories.
After trying numerous find, grep and xargs combinations which worked great in the shell and DID NOT work in emacs I finally decided that for SVN projects I will give up the grep-find command altogether in favour of the emacs grep
command, with the following parameters:
grep -nH -r --exclude-dir='svn' --include='*.h' --include='*.cpp' --include='*.c' -e SrchStr *
Note that this is actually an improvement on grep-find in that it only searches cpp, c and h files 🙂 If you want to include all files then remove the 3 –include switches in the above emacs grep command.
Save it in your .emacs file to make it permanent:
(setq grep-command "grep -nH -r --exclude-dir='svn' --include='*.h' --include='*.cpp' --include='*.c' -e SrchStr *")
This way whenever you type “M-x grep” in emacs the above command line will appear. Just replace SrchStr by whatever you’re searching for and off you go 🙂
A little later today I also found a solution using grep-find to ignore the .svn directories:
(setq grep-find-command
"find . -type f '!' -wholename '*/.svn/*' -print0 | xargs -0 -e grep -nH -e ")
.. which is also quite cool, so posting it here as well. Obviously Ben is a lot more experienced (and patient?) with emacs and Elisp than I am… 🙂