[英]vim: Display the number of matches in the statusline
如果您可以手动触发以显示光标下当前搜索模式/单词的匹配数,那么我的SearchPosition插件就可以提供此功能。
其输出如下所示:
1 match after cursor in this line, 8 following, 2 in previous lines; total 10 for /\<SearchPosition\>/
可以通过(全局)变量轻松地将匹配数放入状态栏,例如
:set statusline+=\ %{g:matchnum}\ matches
这也避免了Vim减慢太多的情况,因为状态行经常被评估。 问题是如何在搜索时更新该变量。
简单的方法是通过自定义命令,例如:Search
,而不是/
。 在这里,您仍然可以触发/
搜索,并另外从( :%s///n
命令捕获(使用:redir
)匹配的数目,并使用它来更新变量。 这很容易实现,但不是非常用户友好。
困难的方法是通过映射挂接到/
命令(以便您可以继续使用它而不是学习新命令),另外还可以挂接到其他搜索命令(例如*
和#
)。 对于/
,然后需要:cmap <CR>
在结束搜索时被触发,然后从命令行获取输入的模式,运行:%s///n
并更新变量。
:vimgrep/foo/g %
:vimgrep/{pattern}/g %
为图案的搜索, {pattern}
,在当前文件中, %
。 g
标志表示在一行(也称为全局)中查找所有匹配项。
这将使用搜索结果填充quickfix
窗口。 您可以通过:cnext
和:cprevious
在匹配项之间移动。 通过:copen
打开quickfix
结果窗口。 我个人使用的是Tim Pope 无损插件,它提供了]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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.