使用 notepad++ 搜索字符串时,会打开新窗口并显示查找结果。我想在 vim 中使用这个功能。谷歌搜索后,我发现了一些建议:
vimgrep /<pattern>/ %
copen
可以创建执行这两个命令的映射。模式应该是当前单词:可能是 vim 中的 cword 关键字?
使用 notepad++ 搜索字符串时,会打开新窗口并显示查找结果。我想在 vim 中使用这个功能。谷歌搜索后,我发现了一些建议:
vimgrep /<pattern>/ %
copen
可以创建执行这两个命令的映射。模式应该是当前单词:可能是 vim 中的 cword 关键字?
我建议使用 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
等等
这个要求其实很简单。但是要获得用户输入的模式,您需要一个函数。
function! FindAll()
call inputsave()
let p = input('Enter pattern:')
call inputrestore()
execute 'vimgrep "'.p.'" % |copen'
endfunction
如果你想有一个映射,添加这一行:
nnoremap <F8> :call FindAll()<cr>
但正如我在你的问题下评论的那样。%
可能不适用于未命名的缓冲区。
这两个命令可以缩短和链接::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}
跳转到相应的行。