rg -l "searched phrase" | xargs vim
用搜索到的词填充vim,但是这次我需要在vim中再次搜索它们。
如何将ripgrep搜索结果通过管道传输到vim,以便在精确的搜索位置(行和列)打开搜索到的文件?
答案 0 :(得分:3)
根据Filling the quickfix window from stdin?,您可以执行以下操作:
rg --vimgrep 'pat' | vim -q /dev/stdin
您需要提供--vimgrep
才能将ripgrep的输出转换为Vim的正确格式。 -q
将文件读入快速修复列表。
通过:grep
从Vim内部进行搜索
将以下内容添加到您的vimrc
文件中:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
现在您可以执行:grep 'pattern'
,它将填充快速修复列表。重做搜索就像:grep
一样容易,然后按一下<up>
返回到相关的:grep
。
:cnext
/ :cprevious
在快速修复列表中前后浏览快速修复:cfirst
/ :clast
跳转到快速修复列表的开头和结尾:copen
打开quickfix窗口。使用<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主题集,Search multiple files with :vimgrep。
如果您使用:grep
/ :vimgrep
做project-wide search and replace的方式,那么我建议您使用: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
答案 1 :(得分:0)
您可以使用带有-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