如何覆盖vim中的默认语法突出显示?
在VIM中,我需要执行一个简单的任务—突出显示“(“and”)”。我可以通过发出两个命令轻松做到这一点:如何覆盖vim中的默认语法突出显示?,vim,vim-syntax-highlighting,Vim,Vim Syntax Highlighting,在VIM中,我需要执行一个简单的任务—突出显示“(“and”)”。我可以通过发出两个命令轻松做到这一点: :syn match really_unique_name display "[()]" :hi really_unique_name guifg=#FF0000 但是,如果我向empty.vimrc和restart-VIM添加相同的命令(当然没有“:”),则“(“and”)”在.cpp文件中不再突出显示。看起来,若我创建/load.cpp文件,VIM会为它加载语法文件,覆盖我的自定义高亮
:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000
但是,如果我向empty.vimrc和restart-VIM添加相同的命令(当然没有“:”),则“(“and”)”在.cpp文件中不再突出显示。看起来,若我创建/load.cpp文件,VIM会为它加载语法文件,覆盖我的自定义高亮显示。如何在.vimrc文件中配置突出显示,使其在标准语法定义之后发生,或不受标准语法定义的影响?使用匹配,而不是使用syn match。例如:
hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"
match
的优先级高于syn-match(即:其高亮显示将覆盖syn-match生成的高亮显示),并且(行为良好的)语法文件不应与之混淆
match的一个警告是它是每个窗口的,而不是每个缓冲区的
如果需要其他匹配项,可以使用2匹配项和3匹配项
有关更多信息,请参见Vim中的帮助:匹配。将设置置于~/.Vim/after/syntax/cpp.Vim有四个选项(其中两个是其他人建议的):
after
结构:
:match really_unique_name "[()]"
:call matchadd('really_unique_name', "[()]")
" Or
:let MyMatchID = matchadd('really_unique_name', "[()]")
" and then if you want to switch it off
:call matchdelete(MyMatchID)
function! CreateBracketMatcher()
call clearmatches()
call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()
您可能还对我的答案感兴趣,其中包括更一般的运算符高亮显示。我通常这样做:
:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"
au
代表autocmd
。帮助会告诉你更多。谢谢。它在我的windows设备上正常工作。但在MacOS机上,“hi really_unique_name guifg=#FF0000”不起作用。即使它是.vimrc中的唯一一行,在启动vim并执行“hi really_unique_name”之后,我看到“really_unique_name xxx clear”。为什么它被“清除”?感谢“au BufEnter”,它在Windows和Macos盒上都能很好地工作(嗨,Macos盒不起作用-它是在处理了vimrc之后以某种方式被清除的)。只有在缓冲区打开后才应该创建缓冲区本地AutoCMD。我列出的建议都不应该在.vimrc中:使用vimfiles/after/syntax/cpp.vim或类似选项之一。或者,你可以用“au BufEnter,BufNew,BufReadPost*.cpp call CreateBracketMatcher()”来敷衍它,但这有点敷衍。@DrAl我刚刚根据你的回答写了一段话:谢谢!那个rainbow.vim导致了一个死链接。这似乎是一个更新版本:嗯,似乎是一个很好的解决方案。但对我来说不起作用。。。
:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter
:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"