Here我可以看到如何显示匹配数量,但每当我使用“/”进行搜索或在单词上点击#时,如何在状态行中显示此内容?
答案 0 :(得分:1)
如果您可以使用手动触发来显示光标下当前搜索模式/单词的匹配数,我的SearchPosition plugin就可以提供。
它的输出如下:
1 match after cursor in this line, 8 following, 2 in previous lines; total 10 for /\<SearchPosition\>/
答案 1 :(得分:0)
将匹配数量放入状态行可以通过(全局)变量轻松完成,例如
:set statusline+=\ %{g:matchnum}\ matches
这也避免了过多地降低Vim的速度,因为经常评估状态线。问题是如何在搜索上更新该变量。
简单方法是通过自定义命令,例如:Search
您必须使用/
代替/
。在那里,您仍然可以触发:redir
搜索,并另外捕获(使用:%s///n
)来自单独/
命令的匹配数,并使用它更新变量。这很容易实现,但不是非常用户友好。
困难方法正在使用映射挂钩*
命令(以便您可以继续使用它而不是学习新命令),另外可能会转到其他搜索命令中#
和/
也是:cmap <CR>
。对于:%s///n
,您需要在结束搜索时触发{{1}},然后从命令行中获取输入的模式,运行{{1}}并更新变量。
答案 2 :(得分:0)
:vimgrep/foo/g %
:vimgrep/{pattern}/g %
在当前文件{pattern}
中搜索模式%
。 g
标志意味着在一条线上找到所有匹配,也就是全局。
这将使用搜索结果填充quickfix
窗口。您可以通过:cnext
和:cprevious
在匹配项之间移动。通过quickfix
打开:copen
结果窗口。我个人使用Tim Pope unimpaired插件,它提供]q
和[q
映射到:cnext
和:cprev
以及一堆其他方便的映射。
如果您已经通过*
,#
或/
搜索了某个模式,那么您可以通过:vimgrep//g %
重复使用该模式。我在~/.vimrc
中使用了以下映射:
nnoremap g// :vimgrep/<c-r>//g %<cr>
我知道这是一个相当复杂/不令人满意的问题,但我相信:vimgrep
和quickfix
值得了解。我个人很少需要知道文件中的匹配数量。这在我的工作流程中根本不适用。如果我需要在所有匹配项上执行某些操作,请使用:s
或宏(通常使用set nowrapscan
)。
如需更多帮助,请参阅:
:h :vimgrep
:h :cnext
:h quicfix
:h 'wrapscan'