在VIM中,我需要执行一个简单的任务 - 突出显示“(”和“)”。我可以通过发出两个命令轻松地做到这一点:
:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000
但是如果我添加相同的命令(当然没有':')来清空.vimrc并重新启动VIM - “(”和“)”在.cpp文件中不再突出显示。看来,如果我创建/加载.cpp文件,VIM会加载语法文件,覆盖我的自定义高亮显示。如何在我的.vimrc文件中配置高亮显示,以便在标准语法定义之后进行,或者不受标准语法定义的影响?
答案 0 :(得分:24)
有四种选择(其中两种已被其他人建议):
在vimfiles中使用after
结构(〜/ .vim / after / syntax / cpp.vim):
:help after-directory
对当前窗口使用匹配:
:match really_unique_name "[()]"
再次对当前窗口使用matchadd(),但如果您以后需要,可以删除单个匹配项:
:call matchadd('really_unique_name', "[()]")
" Or
:let MyMatchID = matchadd('really_unique_name', "[()]")
" and then if you want to switch it off
:call matchdelete(MyMatchID)
安装Dr Chip的rainbow.vim插件,根据缩进级别以不同的颜色突出显示大括号。
对于这种情况,我建议选项1,因为看起来你想让它成为一般语法的一部分。如果你想使用匹配并希望它们是特定于缓冲区的(而不是特定于窗口的),你需要这样的东西:
function! CreateBracketMatcher()
call clearmatches()
call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()
有关详细信息,请参阅:
:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter
您可能也对我对this question的回答感兴趣,其中涵盖了更为一般的运营商突出显示。
答案 1 :(得分:9)
将设置放在〜/ .vim / after / syntax / cpp.vim
中答案 2 :(得分:4)
不使用syn匹配,只需使用匹配。例如:
hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"
match
具有比syn-match更高的优先级(即:它的突出显示将覆盖由syn-match生成的突出显示),并且(表现良好的)语法文件不应该与它混淆。
匹配的一个警告是它是每个窗口,而不是每个缓冲区。
如果您需要其他匹配项,则可以使用2match和3match。
有关详细信息,请参阅Vim中的:help :match
。
答案 3 :(得分:2)
我通常这样做:
:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"
au
代表autocmd
。帮助会说明更多信息。