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

标签 vim vim-syntax-highlighting

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

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

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

最佳答案

有四个选项(其中两个已被其他人建议):

  • 使用 after vimfiles 中的结构(~/.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 的回答感兴趣,它涵盖了更一般的运算符突出显示。

    关于vim - 如何覆盖vim中的默认语法高亮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211588/

    相关文章:

    vim - 如何仅在vim的当前选项卡中关闭所有窗口

    Vim 在 Ubuntu 11.04 : Working with clipboard of Unity

    java - Vim 在 mac 中制作很多进程

    vim - 如何使 vim SpellCheck *not* 代码感知?

    vim - 在vim中突出显示^M(CR)

    vim - 如何计算屏幕上显示的 &statusline 的宽度?

    vim - 如何以简单的方式将一些行向左或向右移动? (不是 n<< 或 n>>)

    python - Python 的 Vim 语法高亮 'else:'

    vim - 在 Vim 中,如何设置在插件加载后运行的自动命令?

    vim - vim 中内联和显示数学之间的不同语法突出显示