Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Using ripgrep in Emacs using helm-ag (Spacemacs)

Why

Ripgrep is a fast search tool like grep. It's mostly a drop-in replacement for ag, also know as the Silver Searcher.

helm-ag is a fantastic package for Emacs that allows you to display search results in a buffer. You can also jump to locations of matches. Despite the name, helm-ag works with ripgrep (rg) as well as with ag.

How

  1. Install ripgrep

  2. Make Spacemacs use helm-project-do-ag directly when pressing SPC / without preselecting the symbol under the cursor.

    Type SPC f e d to bring up ~/.spacemacs.

    (defun dotspacemacs/user-config ()
      ;; ....
      (evil-leader/set-key "/" 'spacemacs/helm-project-do-ag))
    
  3. Force ripgrep as search tool

    SPC SPC customize-set-variable

    Select variable helm-ag-base-command

    Set value to rg --vimgrep --no-heading --smart-case

Usage

SPC / should allow you to search in the current project.

You can prefix patterns with options

-G*.cljs -w time - search for the word "time" in all .cljs files

-tclojure time - search for "time" in all .{clj,cljs,cljc} files

uno\ due\ tre - search for the string "uno duo tre"

-C5 foo - search for "foo" but show 5 lines of context before and after the match

(?:^|[^\w-])time(?:[^\w-]|$) - search for lisp-word "time", i.e. search for the full word "time" while considering "-" to be a word characer

@well1791
Copy link

well1791 commented Apr 2, 2018

Ok, quick update
Looks like I have been using counsel-grep so my approach was this

  1. put:
    (defun dotspacemacs/user-config ()
      ;; ....
      (evil-leader/set-key "/" 'counsel-grep))
    
  2. run: SPC SPC customize-set-variable
  3. search: counsel-grep-base-command
  4. put: rg --vimgrep --no-heading --smart-case %s

It works, although it's too verbose. (: thanks folks!

@longshi0
Copy link

longshi0 commented Mar 15, 2019

My solution was simpler, although it probably works because counsel got some upgrade since the last post.

(defun dotspacemacs/user-config ()
  ;; ....
  (evil-leader/set-key "/" 'counsel-rg))

Works like a charm.

@mr337
Copy link

mr337 commented Aug 22, 2019

Having issue similar to https://gist.github.com/pesterhazy/fabd629fbb89a6cd3d3b92246ff29779#gistcomment-2397946 but not using counsel-grep. When trying set the helm-ag-base-command not finding anything.

Screen Shot 2019-08-22 at 2 06 18 PM

This is how I am confirming I am using helm-ag.
Screen Shot 2019-08-22 at 2 06 46 PM

@mr337
Copy link

mr337 commented Aug 22, 2019

Following up here is what I did to fix it. Add the following to .spacemacs files in user-config section.

(defun dotspacemacs/user-config ()
  ;; ....
  (evil-leader/set-key "/" 'spacemacs/helm-project-do-ag)
  (setq helm-ag-base-command "rg -S --no-heading")
)

I still don't know why it won't show up when using the customize-set-variable.

@jokem59
Copy link

jokem59 commented Nov 3, 2019

This looks like a sleeker approach then my current deadgrep approach. Would you happen to have instructions on how to set this up from a non-spacemacs configuration?

@pesterhazy
Copy link
Author

pesterhazy commented Nov 3, 2019

@jokem59, at this point I'm not using the hack anymore. I've also switched away from Spacemacs because problems like this were too hard to fix for me in Spacemacs.

helm-ag (or helm-projectile-ag, I forget which) has support for rg in its own right. There's also helm-rg, confusingly :-)

@jokem59
Copy link

jokem59 commented Nov 5, 2019

Thanks @pesterhazy! Out of curiosity, how do use rg with emacs now?

@pesterhazy
Copy link
Author

pesterhazy commented Nov 6, 2019

@Antiarchitect
Copy link

Antiarchitect commented Nov 18, 2019

Gentlemen, how can I reduce my search with SPC-/ to the current directory in Treemacs only - no the entire project?

@sbseltzer
Copy link

sbseltzer commented Dec 10, 2019

Does anyone know if there's a way to specify the rg [PATH ...] segment? I work on a lot of projects where directories outside the current project are useful to search in addition to the project and have not been able to find anything.

@Antiarchitect
Copy link

Antiarchitect commented Dec 10, 2019

Gentlemen, how can I reduce my search with SPC-/ to the current directory in Treemacs only - no the entire project?

SPC-s-f

@demalworkshop
Copy link

demalworkshop commented Feb 19, 2021

If I restart spacemacs, I have to re-run step 3. I tried putting (setq helm-ag-base-command "rg --vimgrep --no-heading --smart-case") in my dotspacemacs/user-config() in .spacemacs, but that does not help. What can I do to set the variable helm-ag-base-command to the desired value automatically upon restarting spacemacs?

@AtomicNess123
Copy link

AtomicNess123 commented Mar 17, 2022

Why would you replace ag with rg?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment