4

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

vimgrep /<pattern>/ %
copen

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

4

3 回答 3

4

我建议使用 lvimgrep(这样你就可以使用 quickfix :make)

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

另外,如果您只想在当前文件中查找:

:g/<pattern>/

将在每个匹配的行上调用“打印”(默认命令)。

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

等等

:global 更有用:

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

等等

于 2013-04-09T15:31:34.143 回答
3

这个要求其实很简单。但是要获得用户输入的模式,您需要一个函数。

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

如果你想有一个映射,添加这一行:

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

但正如我在你的问题下评论的那样。%可能不适用于未命名的缓冲区。

于 2013-04-09T15:48:39.763 回答
1

这两个命令可以缩短和链接::vim foo %|co. 您可以像这样拉出光标下的单词::vim <C-r><C-w> %|co.

这是一个快速的普通模式映射,您可以使用它在 quickfix 窗口中列出光标下所有出现的单词:

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

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

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

于 2013-04-09T19:47:40.657 回答