Look around this blog and you will find nice words about ripgrep. I especially enjoy how I can plug it into Emacs, like the time when I devised my own Helm commands for it.
However, roughly a year ago I
started my journey to a more vanilla Emacs experience. During this time I have
been slowly moving away from the niceties of
ripgrep in order to stick to a
couple of built-in tools:
vc-git-grep. Now, technically speaking,
both this commands rely on external tools,
git grep. Why should I
use these instead of
ripgrep? Personal preferences, of course:
readily available on Ubuntu and
git is the first tool I install when upgrading
to a new LTS from Canonical.1
Furthermore, I rarely need the power of
ripgrep. Your experience may be
different on this, but the size of my projects does not scare neither
git grep. For instance, I regularly use
vc-git-grep on Emacs sources, which
amounts to something like 2,755,361 lines of code,2 and the performances are
just fine for me.
The only thing I usually do not need from these commands is the prompt for the file types to look into.
(defun mu-recursive-grep (search-term search-path) "Recursively search for SEARCH-TERM in SEARCH-PATH." (interactive (progn (unless grep-command (grep-compute-defaults)) (let ((search-term (grep-read-regexp)) (search-path (expand-file-name (read-directory-name "Directory: " nil default-directory t)))) (list search-term search-path)))) (if (vc-root-dir) (vc-git-grep search-term "*" search-path) (rgrep search-term "*" search-path)))
I combined the two commands to make it simpler. When I am in a Git-versioned
vc-root-dir is not
vc-git-grep; otherwise, it’s time for
rgrep to shine. As trivial as it might
look, the fact that the last two lines of
mu-recursive-grep look similar is
what made it easier for me to devise a common wrapper. Emacs
is always invaluable for discoveries such as this.
One last thing. When in a project, if I want to find where the thing at point is
used I do not need
mu-recursive-grep. For this task
(C-x p g) is enough,3 but
mu-recursive-grep is still helpful
when I want to narrow the search down to a specific path.