我找到了VIM搜索的一个不错的功能,即列出所有搜索结果和相应的行号。
例如:
:g/for.*bar/#
问题:是否有一种"简便"的方法将其输送/将其放入另一个窗口/TAB/缓冲区中?
欢呼!
我不知道如何将:g/for.*bar/#
的输出输送到新的缓冲区中,但我确实知道如何使用vimgrep
获得相同的结果。
尝试:
vimgrep "for.*bar" %
:copen
现在您有一个带有所有搜索结果的缓冲区,甚至可以在:cn
和:cp
之间导航。
看一下:help quickfix
我不知道如何将输出直接重定向到缓冲区,但是您可以使用redir
将其发送到寄存器,然后将寄存器粘贴到新的缓冲区中。
:redir @a
:g/for.*bar/#
:redir END
:enew
:put! a
#
(:g
之后)预先置于每个结果的行号。
您也可以将其发送到文件。
:redir > file
:g/for.*bar/#
:redir END
:e file
有关更多信息,请参见:help :redir
。
称赞接受的答案:我做了一个映射以使用 ss(显示搜索)在QuickFix窗口上打开最后的搜索,将其添加到您的.vimrc:
" show last search results on the quickfix window at windows bottom
nnoremap <silent><leader>ss :vimgrep /<C-r>// % <CR> :botright copen <CR>
br
已经较晚了,但是对于另一种方法,我使用使用cword然后将内容发送到缓冲区的映射进行。对于我的工作流程,这是最有用的方法。
" Search for the word under the cursor in the entire file and take all lines and put them into a new vsplit buffer
noremap <leader>* :redir @s<CR>:silent g/^R^W/p<CR>:redir END<CR>:botright vnew<CR>:silent put s<CR>:nohlsearch<CR>