繁体   English   中英

vim:在状态栏中显示匹配数

[英]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>

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

有关更多帮助,请参见:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM