gri*_*yvp 12 vim vim-syntax-highlighting
在VIM中,我需要执行一个简单的任务 - 突出显示"("和")".我可以通过发出两个命令轻松地做到这一点:
:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000
Run Code Online (Sandbox Code Playgroud)
但是如果我添加相同的命令(当然没有':')来清空.vimrc并重新启动VIM - "("和")"在.cpp文件中不再突出显示.看来,如果我创建/加载.cpp文件,VIM会加载语法文件,覆盖我的自定义高亮显示.如何在我的.vimrc文件中配置高亮显示,以便它在标准语法定义之后发生,或者不受标准语法定义的影响?
DrA*_*rAl 24
有四种选择(其中两种已被其他人建议):
after在vimfiles中使用结构(〜/ .vim/after/syntax/cpp.vim):
:help after-directory
Run Code Online (Sandbox Code Playgroud)使用匹配当前窗口:
:match really_unique_name "[()]"
Run Code Online (Sandbox Code Playgroud)再次对当前窗口使用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)
Run Code Online (Sandbox Code Playgroud)安装Dr Chip的rainbow.vim插件,根据缩进级别获得不同颜色的支撑突出显示.
对于这种情况,我建议选项1,因为它看起来像你想要使它成为一般语法的一部分.如果你想使用匹配并且你希望它们是缓冲区特定的(而不是特定于窗口的),你需要这样的东西:
function! CreateBracketMatcher()
call clearmatches()
call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅:
:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter
Run Code Online (Sandbox Code Playgroud)
您可能也对我对这个问题的回答感兴趣,这个问题涵盖了更多的一般操作员突出显示.
而不是使用同步匹配,只需使用匹配。例如:
hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"
Run Code Online (Sandbox Code Playgroud)
match 具有比同步匹配更高的优先级(即:它的突出显示将覆盖同步匹配生成的突出显示),并且(行为良好的)语法文件不应与它混淆。
match 的一个警告是它是每个窗口,而不是每个缓冲区。
如果你需要额外的匹配,你可以使用 2match 和 3match。
有关:help :match更多信息,请参见Vim。