vim:显示状态行中的匹配数

时间:2014-04-16 13:24:32

标签: vim

Here我可以看到如何显示匹配数量,但每当我使用“/”进行搜索或在单词上点击#时,如何在状态行中显示此内容?

3 个答案:

答案 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>

我知道这是一个相当复杂/不令人满意的问题,但我相信:vimgrepquickfix值得了解。我个人很少需要知道文件中的匹配数量。这在我的工作流程中根本不适用。如果我需要在所有匹配项上执行某些操作,请使用:s或宏(通常使用set nowrapscan)。

如需更多帮助,请参阅:

:h :vimgrep
:h :cnext
:h quicfix
:h 'wrapscan'