将 ripgrep 搜索结果通过管道传输到 vim 并在确切的搜索位置打开文件
pipe ripgrep search results to vim and open files at exact search location
rg -l "searched phrase" | xargs vim
用搜索的术语填充 vim,但我需要再次搜索它们,这次是在 vim 中。
如何将 ripgrep 搜索结果通过管道传输到 vim,以便搜索到的文件将在准确的搜索位置(行和列)打开?
您可以使用带有 -c
标志的命令打开 vim(参见 vim --help
)
用那个很容易搜索:
rg -l "searched phrase" | xargs vim -c /searched phrase
但是那不会跳到确切的位置。然而,第二个 -c
将假定打开了第二个文件。以至于我们要链式跳转到后面搜索:
rg -l "searched phrase" | xargs vim -c /searched phrase/norm n
根据Filling the quickfix window from stdin?,您可以执行以下操作:
rg --vimgrep 'pat' | vim -q /dev/stdin
您需要提供 --vimgrep
才能将 ripgrep 的输出转换为 Vim 的正确格式。 -q
将文件读入 quickfix 列表。
或者
通过 :grep
从 Vim 内部进行搜索
将以下内容添加到您的 vimrc
文件中:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
现在您可以执行 :grep 'pattern'
,它将填充快速修复列表。重做您的搜索就像 :grep
然后按一些 <up>
返回到您的相关 :grep
.
一样简单
Quickfix 命令
:cnext
/:cprevious
在快速修复列表中向前和向后导航快速修复
:cfirst
/:clast
跳转到 quickfix 列表的开头和结尾
- 使用
:copen
打开快速修复window。使用 <cr>
跳转到条目
- 使用
:cclose
关闭快速修复window
- 使用
:cc
显示当前错误。
:colder
/:cnewer
跳转 older/newer quickfix 列表
我建议您为 :cnext
和 :cprevious
创建映射。我个人使用 unimpaired.vim,它为 :cnext
和 :cprevious
提供 ]q
& [q
映射。
如果您希望 quickfix window 自动打开,请将以下内容放入您的 vimrc
:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
有个Vimcasts episode about this topic: Search multiple files with :vimgrep.
项目范围内的搜索和替换
如果您使用 :grep
/:vimgrep
作为 project-wide search and replace 的方式,那么我建议您使用 :cdo
/:cfdo
(在 Vim7.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
rg -l "searched phrase" | xargs vim
用搜索的术语填充 vim,但我需要再次搜索它们,这次是在 vim 中。
如何将 ripgrep 搜索结果通过管道传输到 vim,以便搜索到的文件将在准确的搜索位置(行和列)打开?
您可以使用带有 -c
标志的命令打开 vim(参见 vim --help
)
用那个很容易搜索:
rg -l "searched phrase" | xargs vim -c /searched phrase
但是那不会跳到确切的位置。然而,第二个 -c
将假定打开了第二个文件。以至于我们要链式跳转到后面搜索:
rg -l "searched phrase" | xargs vim -c /searched phrase/norm n
根据Filling the quickfix window from stdin?,您可以执行以下操作:
rg --vimgrep 'pat' | vim -q /dev/stdin
您需要提供 --vimgrep
才能将 ripgrep 的输出转换为 Vim 的正确格式。 -q
将文件读入 quickfix 列表。
或者
通过 :grep
将以下内容添加到您的 vimrc
文件中:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
现在您可以执行 :grep 'pattern'
,它将填充快速修复列表。重做您的搜索就像 :grep
然后按一些 <up>
返回到您的相关 :grep
.
Quickfix 命令
:cnext
/:cprevious
在快速修复列表中向前和向后导航快速修复:cfirst
/:clast
跳转到 quickfix 列表的开头和结尾- 使用
:copen
打开快速修复window。使用<cr>
跳转到条目 - 使用
:cclose
关闭快速修复window - 使用
:cc
显示当前错误。 :colder
/:cnewer
跳转 older/newer quickfix 列表
我建议您为 :cnext
和 :cprevious
创建映射。我个人使用 unimpaired.vim,它为 :cnext
和 :cprevious
提供 ]q
& [q
映射。
如果您希望 quickfix window 自动打开,请将以下内容放入您的 vimrc
:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
有个Vimcasts episode about this topic: Search multiple files with :vimgrep.
项目范围内的搜索和替换
如果您使用 :grep
/:vimgrep
作为 project-wide search and replace 的方式,那么我建议您使用 :cdo
/:cfdo
(在 Vim7.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