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

Mat*_*ggs 20 vim

在emacs中,当您进行搜索时,缓冲区中将出现所有出现的高亮颜色,以及光标碰巧出现的另一种颜色.我想知道是否有人知道vim中的类似行为,vim插件,甚至是关于如何在vimscript中完成它的一些想法.

(注意,我已经知道了hl-IncSearch,它很接近,但不是我想要的)

Pet*_*ter 10

听起来你想突出显示缓冲区中的所有结果.你可以说

:set hls
Run Code Online (Sandbox Code Playgroud)

哪个会打开hlsearch.然后你可以说

:set nohls  # turn off permanently
:noh        # turn off until next time you search.
Run Code Online (Sandbox Code Playgroud)

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

  • 不确定这是否符合 OP 正在寻找的内容。他们已经知道如何突出显示搜索结果,但想要更改“当前选择”结果的颜色。`*` 键调用的命令不能解决这个问题——它会*改变*搜索模式,我认为这不是他们想要做的。 (2认同)

Nic*_*son 7

据我所知,没有内置的方法来做你想要的.

如果我尝试实现它自己...那么一种方式,你可以做到这一点是通过重写*,n并且p它的东西,如结合这个功能:

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
Run Code Online (Sandbox Code Playgroud)

我还没有测试过,所以这不是一个完整的解决方案,但我认为这至少是一种可行的方法.

编辑:您可能需要设置一些自定义高亮颜色.这个vimwiki页面提供了一些有关它的信息,虽然我记得在某个地方看到了一个更为简洁的例子.

再次编辑:也许更清晰的解决方案是将Mark.vim与第一种技术结合使用.然后它将归结为类似的东西:

noremap n \nn\m
noremap p \np\m
noremap * \n*\m
Run Code Online (Sandbox Code Playgroud)

  • mark.vim是hela-cool,可能就是这样:D (2认同)

tim*_*kro 5

我刚刚写了一个 vim 插件,可以满足您的要求。

https://github.com/timakro/vim-searchant