Труба 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