vim 中的单词突出显示(插件)

vim 中的单词突出显示(插件)

给定一个单词列表,我想突出显示当前缓冲区中的所有单词。我正在编写一个 vim 插件,所以我希望使用 yak shaving。

这可能以理智的方式实现吗?

答案1

highlight LOL ctermbg=red
call matchadd("LOL", "this")
call matchadd("LOL", "little")
call matchadd("LOL", "light")
call matchadd("LOL", "of")
call matchadd("LOL", "mine")

答案2

是的,突出显示多个搜索词非常容易,并且非常合理,如下所述。

F8作为一个简单的例子,下面是键绑定的示例突出显示当前缓冲区中光标下单词的所有出现位置取自突出显示所有搜索模式匹配 - Vim Tips Wiki(只需输入:set hls打开搜索突出显示即可直奔主题):

:nnoremap <F8> :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>

因此,当我坐在单词上时,我在当前缓冲区中按下 F8 按钮,read我得到了以下结果:

在此处输入图片描述

扩大搜索范围,取自多个单词搜索模式 - Vim Tips Wiki找到这个或者,搜索由转义管道符分隔的单词,\|如下所示:

/read\|execute\|readattr

显示的内容如下:

在此处输入图片描述

答案3

对于允许你

  • 突出显示光标下的单词
  • 突出显示命令行中指定的模式
  • 赋予每个新图案新颜色
  • 查看当前突出显示的模式
  • 停止突出显示模式

mark.vim

答案4

使用matchadd()/matchdelete()函数可以轻松添加自定义突出显示(而不会影响当前搜索模式)。问题在于当前缓冲区要求,因为这些功能是窗口局部

对于一个快速而粗糙的临时解决方案,这种差异可能并不重要,但对于插件,您需要处理(通过:autocmds)当前窗口中显示另一个缓冲区的时间(然后清除高亮),并且可能还有另一个窗口显示与当前窗口相同的缓冲区。

相关内容