如何在vim中显示搜索的所有结果

时间:2013-04-09 15:25:42

标签: vim

使用notepad ++搜索字符串时,会打开新窗口并显示find 结果。我想在vim中使用这个功能。谷歌搜索后,我发现了一些建议:

vimgrep /<pattern>/ %
copen

可以创建执行这两个命令的映射。模式应该是当前的单词:可能是vim中的cword关键字?

3 个答案:

答案 0 :(得分:3)

要求实际上很简单。但要获得用户输入的模式,您需要一个功能。

function! FindAll()
    call inputsave()
    let p = input('Enter pattern:')
    call inputrestore()
    execute 'vimgrep "'.p.'" % |copen'
endfunction

如果您想要映射,请添加以下行:

nnoremap <F8> :call FindAll()<cr>

但正如我在你的问题上评论的那样。 %可能不适用于默认缓冲区。

答案 1 :(得分:2)

我建议使用lvimgrep(所以你可以使用quickfix:make)

:nnoremap <F6> :lvimgrep /\M\<<C-R><C-W>\m\>/ **/*.[ch]pp **/Makefile | lopen<CR>

另外,如果只是想要在当前文件中找到:

:g/<pattern>/

将调用&#39; print&#39; (默认命令)在每个匹配的行上。

:v//               " non-matching lines
:g//-1             " lines preceding the matching line
:g//-1,+1          " lines around the matching line

:全球性更有用:

 :g/foo/ join       " join all lines containing foo

答案 2 :(得分:1)

这两个命令可以缩短和链接::vim foo %|co。你可以在光标下拉出这个词::vim <C-r><C-w> %|co

这是一个快速正常模式映射,您可以使用它在快速修复程序窗口中列出光标下所有单词的出现位置:

nnoremap <F6> :vimgrep /<C-r><C-w>/j % <bar> cwindow<cr>

您还可以使用:il[ist] foo显示foo[I所有匹配项的列表,以显示光标下单词的相同列表。

显示列表时,使用:{line number}跳转到相应的行。