труба ripgrep результаты поиска в Vim и открывать файлы в точном месте поиска - PullRequest
0 голосов
/ 22 марта 2019
rg -l "searched phrase" | xargs vim

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

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

Ответы [ 2 ]

4 голосов
/ 22 марта 2019

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

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 .

Project-широкий поиск и замена

Если вы используете :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
0 голосов
/ 22 марта 2019

вы можете открыть 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
...