修改vim突出显示优先级

修改vim突出显示优先级,vim,Vim,我的.vimrc中有以下四种突出显示类型(每种类型显示不同的颜色): incsearch(搜索匹配项时高亮显示) 匹配(当前word,la visual studio编辑器) 2匹配(行尾的尾随空格) hlsearch(常规/搜索匹配) 突出显示的优先级似乎与上面列出的完全相同。例如,如果同一字符中存在任何其他匹配颜色,则增量搜索颜色将覆盖这些颜色 我希望将hlsearch设置为第二优先级,以便它同时覆盖match和2match颜色(如果存在于同一字符中) 有没有办法做到这一点 以下是我的.

我的
.vimrc
中有以下四种突出显示类型(每种类型显示不同的颜色):

  • incsearch(搜索匹配项时高亮显示)
  • 匹配(当前word,la visual studio编辑器)
  • 2匹配(行尾的尾随空格)
  • hlsearch(常规
    /
    搜索匹配)
突出显示的优先级似乎与上面列出的完全相同。例如,如果同一字符中存在任何其他匹配颜色,则增量搜索颜色将覆盖这些颜色

我希望将
hlsearch
设置为第二优先级,以便它同时覆盖
match
2match
颜色(如果存在于同一字符中)

有没有办法做到这一点

以下是我的
.vimrc
文件中的相关行,以供参考:

[...]
set hlsearch
set incsearch
[...]
function Matches()
    highlight curword ctermbg=darkgrey cterm=bold gui=bold guibg=darkgrey
    silent! exe printf('match curword /\V\<%s\>/', escape(expand('<cword>'), '/\'))
    highlight eolspace ctermbg=red guibg=red
    2match eolspace /\s\+$/
endfunction
au CursorMoved * exe 'call Matches()'
[...]
[…]
高亮显示
在搜索中设置
[...]
函数匹配()
突出显示curword-ctermbg=darkgrey-cterm=bold-gui=bold-gui=bold-gui=darkgrey
安静!exe printf('match curword/\V\/',转义(展开(“”),'/\'))
高亮显示MBG=red guibg=red
2匹配空间/\s\+$/
端功能
au CursorMoved*exe“调用匹配项()”
[...]

您所使用的所有东西的优先级都是固定的;指定优先级的唯一方法是通过
matchadd()
,您可以使用它来替换
:match
:2match
。由于hlsearch的优先级为零,因此需要传递负优先级,例如-1)

例如,替换

:match Match /\<\w\{5}\>/
:匹配/\/

如果存在(w:lastmatch)
调用matchdelete(w:lastmatch)
恩迪夫
让w:lastmatch=调用matchadd('Match','\',-1)

修复了优先级,但引入了一个问题:matchadd不会替换以前的匹配,而是添加了一个新的匹配。因此,它不再与当前单词匹配,而是与当前和以前的所有单词匹配。您必须记住返回的ID,并在下次调用时记住它。无论如何,您可能会为此定义一个自定义的
:Match
命令,所以请将此附加逻辑放在其中。谢谢,这很有效。请修改您的答案以反映matchadd在重复使用时并不等同于match,需要
如果存在(g:lastmatch)调用matchdelete(g:lastmatch)endif;让g:lastmatch=callmatchadd(…)
Done。我使用了一个窗口局部变量,因为匹配的范围也限定在窗口上。请别忘了接受我的回答。
if exists(w:lastmatch)
    call matchdelete(w:lastmatch)
endif
let w:lastmatch = call matchadd('Match', '\<\w\{5}\>', -1)