Vim:自动突出显示所有选定单词

时间:2013-07-11 17:34:52

标签: vim

Notepad ++有这个非常简洁的功能,如果你选择一个单词,那么单词的每个其他出现都会自动突出显示,就像这样(只有第一个 autocmd 被我突出显示):

N++ highlighting screenshot

我知道类似的事情已经asked,但我希望有一个不需要手动互动的解决方案。

4 个答案:

答案 0 :(得分:14)

如果按*,Vim将搜索光标下所有出现的单词。

如果您启用了搜索突出显示,则会突出显示它们。

您可以将此搜索突出显示在.vimrc

中,以启用搜索突出显示功能
set hlsearch

一个不错的优点是你不必再选择这个词......你只需点击*键。

您可以将其映射到另一个键以使其更方便


如果您不喜欢按*时光标移动的方式,可以通过简单的映射来阻止它:

nnoremap * *N

把它放在你的.vimrc 中)

当您按*时,这会将光标保持在当前位置。

答案 1 :(得分:2)

这样的事情可行。

set updatetime=10

autocmd! CursorHold,CursorHoldI * let @/='\<'.expand('<cword>').'\>'

这使用CursorHold事件将/寄存器设置为光标下的单词。为了使CursorHold事件更频繁地触发,updatetime被降低到10(从4000开始)。

问题:

  1. 您需要手动:set hlsearch。出于某种原因,它本身并没有打开。
  2. 这会干扰正常搜索。由于您在光标移动时更改了/寄存器。
  3. 总的来说,我不会使用这个,因为我觉得搜索比这个功能更重要。

答案 2 :(得分:2)

我的SearchHighlighting plugin有一个<Leader>*映射和:SearchAutoHighlighting命令来启用此功能。它可以突出显示光标下当前的单词/ WORD /整个单词/行/精确行。

答案 3 :(得分:1)

我会这样做:

:au CursorHold,CursorHoldI * :try | exe "call matchdelete(w:my_match)" | catch |  finally | let w:my_match = matchadd('IncSearch', expand('<cword>')) | endtry

如果您不喜欢突出显示,请从:hi的输出中选择一个好的,然后使用它而不是IncSearch。注意:这可能会大大减慢Vim的速度。