Vim:高亮所有incsearch匹配项

11

我正在使用 incsearchhlsearch 选项。在按下回车键后,所有匹配项都会被高亮显示,但是只有当我输入时才会高亮第一个匹配项。我想要在输入时高亮所有匹配项。

我该如何实现这个功能?


今天我在 Sublime Text 中瞎搞了一下(之前我一直是一个快乐的 ST 用户,直到我重新发现 Vim),这是我最终想在 Vim 中看到的东西。 - Steven Lu
可能是在Vim中实现Emacs风格的增量搜索高亮显示的重复问题。应该合并答案。 - cfi
3个回答


7
很遗憾,如果不编写自己的 Vimscript 搜索(通过 getchar() 获取每个键,通过 :match 进行高亮),或在 C 中修补 Vim 核心源代码,则无法实现这一点。
这种实现未被采用的原因可能是为了保持 incsearch 的快速和即时性。
更新:从 Vim 7.4.2259 开始,突出显示所有匹配项是默认行为(使用 'incsearch' 只能看到下一个匹配项)。

1
我敢打赌,有人可以想出一种异步的方法,并利用空闲周期来填充其余的匹配项(无论如何只填充缓冲区中可见的匹配项)。您知道Vim的架构是否适合这种情况,还是计算必须在每个按键触发后阻塞? - Steven Lu
1
@StevenLu Vim本质上是单线程的,因此这可能会很困难。 - Ingo Karkat
@StevenLu 这是Emacs的默认行为,所以我认为在Vim中实现这个功能也不难。 - Sampajano
@Xdxter,你能详细说明一下这个假设的原因吗?Emacs与Vim除了它也已经存在了一段时间之外没有任何关系。 - Steven Lu
关于速度的重点是只突出显示屏幕上可见的内容。在突出显示时,无需在用户仍在输入搜索模式时搜索整个文件。我猜这就是为什么已经有插件可用了。如果这个问答能够更改接受的答案,因为它被重复链接到了,那将是很好的。 - cfi
显示剩余3条评论

1
也许我对此有所错误,因为答案看起来似乎非常简单,只需同时启用incsearchhlsearch即可:
set incsearch
set hlsearch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接