rg -l "searched phrase" | xargs vim
populates vim with searched terms, but I need to search for them once again, this time in vim.
How to pipe ripgrep search results to vim, so searched files will be opened at exact search location (line and column)?
According to Filling the quickfix window from stdin? you can do the following:
rg --vimgrep 'pat' | vim -q /dev/stdin
You need to supply --vimgrep
to get ripgrep's output into the correct format for Vim. -q
reads a file into the quickfix list.
Do your searching from inside Vim via :grep
Add the following to your vimrc
file:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
Now you can do :grep 'pattern'
and it will populate the quickfix list. Redoing your search is as easy as :grep
followed by some <up>
presses to get back to your relevant :grep
.
:cnext
/:cprevious
to navigate the quickfix forwards and backwards in the quickfix list:cfirst
/:clast
to jump to the start and end of the quickfix list:copen
to open the quickfix window. Use <cr>
to jump to an entry:cclose
to close the quickfix window:cc
to display the current error.:colder
/:cnewer
to jump older/newer quickfix listsI would recommend you create mappings for :cnext
and :cprevious
. I personally use unimpaired.vim which provides ]q
& [q
mappings for :cnext
and :cprevious
.
If you want the quickfix window to open automatically put the following in your vimrc
:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
There is a Vimcasts episode about this topic: Search multiple files with :vimgrep.
If you are using :grep
/:vimgrep
as way to do a project-wide search and replace then I suggest you use :cdo
/:cfdo
(in Vim 7.4.980+).
:grep 'foo'
:cfdo %s/foo/bar/g|w
:h :grep
:h 'grepprg'
:h quickfix
:h :cnext
:h :copen
:h :ccl
:h :cc
:h :colder
:h :cdo
:h :cfdo