rg -l "searched phrase" | xargs vim
用搜索词填充 vim,但我需要再次搜索它们,这次是在 vim 中。
如何将 ripgrep 搜索结果通过管道传输到 vim,以便搜索到的文件将在确切的搜索位置(行和列)打开?
根据Filling the quickfix window from stdin? 您可以执行以下操作:
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
有一个关于这个主题的Vimcast插曲:使用 :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
您可以使用带有-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