1

当我在 Vim 中寻找合适的 html 标签突出显示时,我发现了这篇文章。但是在查看了 romainl 的答案(和他的截图)和 html 语法文件之后,我想知道如何在不改变 html 标记颜色的情况下更改属性后 = (等号)的颜色以匹配属性的颜色?

4

1 回答 1

9
  1. 勘探

    这是我在某处(很久以前,可能在 Vim Wiki 上)找到的一个非常有用的函数,它为您提供光标下单词/符号的语法组:

    function! SynStack()
        if !exists("*synstack")
            return
        endif
        echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
    endfunc
    

    只需将光标放在要检查的项目上并键入:call SynStack()以在命令行中回显语法组。

    如果我将光标放在=in上<div id="example"></div>,则输出SynStack()['htmlTag']

    随着光标的出现,<>我也得到['htmlTag']了。

    将光标放在div我得到['htmlTag', 'htmlTagN', 'htmlTagName']这意味着div( h1, p...) 的颜色是通过一个称为htmlTagName继承自的特殊语法组定义的htmlTag

    一些替代/自定义语法文件可能会定义名称略有不同的其他语法组,因此我的示例仅对我有效。您必须尝试SynStack()获得正确的语法组。

  2. 反射

    根据我们迄今为止收集到的信息,很明显标签名称 ( ['htmlTagName']) 可以独立于标签的其余部分设置样式,但似乎无法突出显示=不同之处。因为它是与 相同的语法组的一部分,<>所以=必须以相同的方式突出显示。

    我们有两种可能:

    一个。<,颜色相同,颜色=不同。>div

    湾。<, div,=>都是相同的颜色。

    原始主题遵循a我不喜欢的路径,所以我不得不b在我对上一个问题的回答中使用几行对其进行一点自定义(路径):

    hi htmlTag            guifg=#90b0d1 gui=NONE 
    hi htmlSpecialTagName guifg=#90b0d1 gui=NONE 
    hi htmlTagName        guifg=#90b0d1 gui=NONE  
    hi htmlEndTag         guifg=#90b0d1 gui=NONE
    

    事实上,不可能有=不同的颜色。<>如果我们想着色,=我们将编辑 HTML 语法文件你的颜色方案,牛仔风格。

  3. 行动

    第一步是制作默认 HTMl 语法文件的本地副本:

    $ cp /usr/share/vim/vim73/syntax/html.vim ~/.vim/syntax/html.vim
    

    下一步是编辑此文件。我们将执行两个更改:

    1. 添加htmlEqualSign语法组的定义

      第 44 行应该是(注意!未经彻底测试。):

      syn match htmlEqualSign contained "="
      
    2. 添加htmlEqualSignhtmlTag

      第 40 行~/.vim/syntax/html.vim应更改为:

      syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
      

      至:

      syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,htmlEqualSign
      

    最后一步是编辑您的配色方案,使其=按照您想要的方式着色。你可以通过在你的配色方案中的某处添加这一行来做到这一点:

    hi htmlEqualSign guifg=#00ff00
    

    当然,您可以选择颜色。

    但我认为您希望与(从您的问题中不是很清楚)=相同的颜色。id为此,我们将组“链接”htmlEqualSign到用于属性的组。再次,:call SynStack()有很大帮助:属性的语法组是htmlArg这样添加到您的颜色方案的行将是:

    hi link htmlEqualSign htmlArg
    
于 2012-05-21T22:03:46.817 回答