Труба ripgrep результаты поиска в Vim и открывать файлы в точном месте поиска

rg -l "searched phrase" | xargs vim

заполняет vim поисковыми терминами, но мне нужно искать их еще раз, на этот раз в vim.

Как передать результаты поиска ripgrep в vim, чтобы найденные файлы были открыты в точном месте поиска (строка и столбец)?

2 ответа

Согласно заполнению окна быстрого исправления из стандартного ввода? Вы можете сделать следующее:

rg --vimgrep 'pat' | vim -q /dev/stdin

Вам нужно поставить --vimgrep чтобы получить вывод ripgrep в правильный формат для Vim. -q читает файл в список быстрых исправлений

альтернативно

Выполните поиск внутри Vim через :grep

Добавьте следующее к вашему vimrc файл:

set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m

Теперь вы можете сделать :grep 'pattern' и он заполнит список быстрых исправлений. Повторить поиск так же просто, как :grep сопровождаемый некоторыми <up> нажимает, чтобы вернуться к вашему релевантному :grep,

Команды быстрого исправления

  • :cnext / :cprevious перемещаться по быстрому исправлению вперед и назад в списке исправлений
  • :cfirst / :clast перейти к началу и концу списка быстрых исправлений
  • использование :copen открыть окно быстрого исправления. использование <cr> перейти к записи
  • использование :cclose закрыть окно быстрого исправления
  • использование :cc для отображения текущей ошибки.
  • :colder / :cnewer перейти к старым / новым спискам быстрых исправлений

Я бы порекомендовал вам создавать сопоставления для :cnext а также :cprevious, Я лично использую unimpaired.vim, который обеспечивает ]q & [q отображения для :cnext а также :cprevious,

Если вы хотите, чтобы окно быстрого исправления открывалось автоматически, укажите в vimrc:

augroup autoquickfix
    autocmd!
    autocmd QuickFixCmdPost [^l]* cwindow
    autocmd QuickFixCmdPost    l* lwindow
augroup END

На эту тему есть эпизод Vimcasts: поиск по нескольким файлам с помощью: vimgrep.

Поиск и замена всего проекта

Если вы используете :grep / :vimgrep как способ сделать поиск по всему проекту и заменить, то я предлагаю вам использовать :cdo / :cfdo (в 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

Вы можете открыть VIM с помощью команды с -c флаг (см. vim --help) С этим легко искать:

rg -l "searched phrase" | xargs vim -c /searched phrase

Но это не будет прыгать в точное положение. Второй -c однако предположим, что открыт второй файл. Так что нам надо цепочкой прыгать за поиском:

rg -l "searched phrase" | xargs vim -c /searched phrase/norm n
Другие вопросы по тегам