如何在vim中覆盖默认语法高亮?

9o685dep  于 2023-05-22  发布在  其他
关注(0)|答案(5)|浏览(169)

在VIM中,我需要执行一个简单的任务-突出显示“(”和“)”。我可以通过发出两个命令轻松地做到这一点:

:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000

但是如果我添加相同的命令(当然没有':')到空的.vimrc并重新启动VIM -“(“和“)”在.cpp文件中不再突出显示。看起来如果我创建/load .cpp文件,VIM会为它加载语法文件,覆盖我的自定义高亮。如何在我的.vimrc文件中配置高光,使其在标准语法定义之后发生,或者不受标准语法定义的影响?

jvlzgdj9

jvlzgdj91#

有四个选项(其中两个已由其他人提出):
1.在vimfiles(~/.vim/after/syntax/cpp.vim)中使用after结构:

:help after-directory

1.对当前窗口使用match:

:match really_unique_name "[()]"

1.对当前窗口使用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)

1.安装DrChip的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的回答感兴趣,它涵盖了更一般的操作符突出显示。

z0qdvdin

z0qdvdin2#

将设置放在/syntax/cpp.vim之后的~/.vim/中

nwo49xxi

nwo49xxi3#

不要使用syn match,只使用match。例如:

hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"

match的优先级高于syn-match(即:它的突出显示将覆盖由syn-match生成的突出显示),并且(行为良好的)语法文件不应该扰乱它。
匹配的一个警告是它是每个窗口,而不是每个缓冲区。
如果你需要额外的匹配,你可以使用2 match和3 match。
有关更多信息,请参阅Vim中的:help :match

u7up0aaq

u7up0aaq4#

我通常是这样做的:

:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"

au代表autocmd。帮助会告诉你更多。

cetgtptt

cetgtptt5#

对于想要覆盖hi def link声明的用户,请使用hi! def link

相关问题