我发现了VIM搜索的一个不错特性,即列出所有的搜索结果及相应的行号。
例如:
例如:
:g/for.*bar/#
问题:有没有一种“简单”的方法将此内容传输到另一个窗口/选项卡/缓冲区中?
谢谢!
我不知道如何将:g/for.*bar/#
命令的输出导入到一个新缓冲区中,但我知道如何使用vimgrep
获得几乎相同的结果。
尝试一下:
vimgrep "for.*bar" %
:copen
现在你有一个包含所有搜索结果的缓冲区,你甚至可以使用:cn
和:cp
在它们之间导航。
查看:help quickfix
。
%
只是在命令模式下被替换为当前文件的路径。 - Benj:cnext
和:cprev
创建映射。我个人建议使用Tim Pope的unimpaired.vim插件(https://github.com/tpope/vim-unimpaired)。它提供了`]q`、`[q`和其他一些映射来移动快速修复列表。 - Peter Rinckervimgrep
。输入以下命令::vimgrep "for.*bar" %
- liammulh我不知道如何将输出直接重定向到缓冲区,但是您可以使用redir
将其发送到寄存器,然后将该寄存器粘贴到新缓冲区。
:redir @a
:g/for.*bar/#
:redir END
:enew
:put! a
#
(在:g
之后)表示每个结果的行号。
您也可以将其发送到文件中。:redir > file
:g/for.*bar/#
:redir END
:e file
:help :redir
以获取更多信息。:put! a
到新缓冲区中。 - Ingo Karkat#
在搜索末尾是什么意思?此外,这会包括行号吗?(我猜不会)你知道是否有任何方法可以使用此方法获取行号吗?如果能够以与s//p
相同的方式执行g/some_pattern/get_ln() the_math/p
,那么这将变得有些琐碎,但我找不到任何方法来实现。 - Christian Reall-Fluharty:global
的哈希命令(#
)会在匹配项前加上行号。 - Thor针对被接受的答案进行补充:我做了一个映射,可以使用\ss(显示搜索)直接在快速修复窗口中打开最后一次搜索结果,将其添加到您的 .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>