给定一个单词列表,我想突出显示当前缓冲区中的所有单词。我正在编写一个 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
答案4
使用matchadd()
/matchdelete()
函数可以轻松添加自定义突出显示(而不会影响当前搜索模式)。问题在于当前缓冲区要求,因为这些功能是窗口局部。
对于一个快速而粗糙的临时解决方案,这种差异可能并不重要,但对于插件,您需要处理(通过:autocmd
s)当前窗口中显示另一个缓冲区的时间(然后清除高亮),并且可能还有另一个窗口显示与当前窗口相同的缓冲区。