在vim中突出显示当前搜索结果

26
在Emacs中,当您进行搜索时,缓冲区内所有出现的内容都会有一个高亮颜色,而光标所在的匹配项则有另一种颜色。我想知道在vim中是否有类似的行为方式、vim插件或者甚至一些使用vimscript实现此功能的想法。
(注意,我已经知道hl-IncSearch,但这不是我要找的东西)

有趣的问题。我不确定Vim中是否存在“当前搜索结果”的概念。 “下一个”和“上一个”结果是由光标所在的单词定义的。如果您的光标位于行/单词/字符上,并且它是高亮显示的一部分,则可以执行特殊逻辑。 - Merlyn Morgan-Graham
是的... 我对它能够内建并不抱太大希望,但有很多处理类似问题的好用的小插件可以在外部找到,只不过有时候很难找到。 - Matt Briggs
这里有一些脚本,可能会帮助你入门:http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches - Merlyn Morgan-Graham
这个功能非常棒,因为我经常遇到无法识别光标所在搜索结果的困扰。目前,我使用一些解决办法,这可能有益于其他人:nnoremap n nzz,按下'n'时可以将搜索命中居中显示,并使用set cul始终突出显示当前行。 - joelostblom
我建议最好的解决方案是将当前匹配项居中显示在屏幕上:nnoremap n nz.nnoremap N Nz - math2001
4个回答

9

听起来你想要突出显示缓冲区中的所有结果。你可以这样说:

:set hls

这将打开hlsearch。然后你可以说

:set nohls  # turn off permanently
:noh        # turn off until next time you search.

您还可以使用*(向前)或#(向后)搜索/突出显示光标下的单词。


3
不确定这是否符合OP的要求。他们已经知道如何突出显示搜索结果,但想要更改“当前选定”的结果颜色。通过*键调用的命令无法解决此问题-它将更改搜索模式,我认为这不是他们想要做的事情。 - Merlyn Morgan-Graham
1
是的,我不确定它有多适合。但请注意,hl-IncSearchhlsearch不同,而*/#只是其他人的额外文本奖励 :) - Peter
是的,Merlyn是对的。我提到hl-IncSearch是因为它在s///操作的上下文中可以实现我想要的效果,但对于普通搜索则不行。 - Matt Briggs

9
据我所知,没有内置的方法可以实现您想要的功能。
如果我要尝试自己实现... 那么一种方法是通过覆盖 *、n 和 p 并将其与 this function 等内容组合起来实现。
noremap n n:call HighlightNearCursor()<CR>
noremap p p:call HighlightNearCursor()<CR>
noremap * *:call HighlightNearCursor()<CR>

function HighlightNearCursor()
  if !exists("s:highlightcursor")
    match Todo /\k*\%#\k*/
    let s:highlightcursor=1
  else
    match None
    unlet s:highlightcursor
  endif
endfunction

我还没有测试过它,所以这不是一个完整的解决方案,但我认为这至少是一个可行的方法。
编辑:您可能需要设置一些自定义的高亮颜色。此vimwiki页面提供了一些相关信息,尽管我记得在某个地方看到了更简洁的例子。
再次编辑:也许一个更干净的解决方案是将Mark.vim与第一种技术结合使用。然后,所有这些都将归结为以下内容:
noremap n \nn\m
noremap p \np\m
noremap * \n*\m

谢谢,这正是我在寻找的。如果未来一两天没有人建议现有的插件,我将接受并实施它。 - Matt Briggs
1
对我来说,这个解决方案只会在每个n/p-visited匹配的另一个上触发。 - Cognitive Hazard

5

4

我没有一个确切的答案,但是可以通过改变光标的高亮显示来获得大约75%的想要的效果。默认的灰色光标块与默认的黄色搜索高亮不太对比。所以只需将光标高亮显示更改为(a)与黄色更对比,并且(2)也与您颜色方案中的其他颜色对比。 对于我来说,这样的东西效果还不错:

highlight Cursor guifg=green guibg=red

对于我来说,当前搜索匹配的第一个字母上闪烁的红色光标非常明显。虽然不如完整的解决方案好,但非常简单。(我认为如果您将这些项目添加到highlight命令中,则在终端Vim中也可以很好地工作,但我还没有在那里测试过。)


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