在Vim中正确的html属性突出显示?

时间:2012-05-21 20:39:09

标签: html vim syntax-highlighting

当我在Vim中寻找正确的html标签突出显示时,我发现了post。但在查看了romainl的答案(以及他的截图)和html语法文件之后,我想知道如何在属性之后更改=(等号)的颜色以匹配属性的颜色而不更改html标签的颜色?

1 个答案:

答案 0 :(得分:8)

  1. <强>探索

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

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

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

    如果我将光标放在=的{​​{1}}上,则<div id="example"></div>的输出为SynStack()

    将光标放在['htmlTag']上我也会得到<>

    光标位于['htmlTag']我得到div,这意味着['htmlTag', 'htmlTagN', 'htmlTagName']divh1 ...)的颜色是通过特殊语法定义的名为p的群组,其继承自htmlTagName

    某些替代/自定义语法文件可能会定义名称略有不同的其他语法组,因此我的示例仅对我有效。您必须使用htmlTag来获取正确的语法组。

  2. <强>的Reflexion

    根据我们目前收集的信息,很明显标签名称(SynStack())可以与标签的其余部分独立设置样式,但似乎无法突出显示['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语法文件您的colorscheme,牛仔风格。

  3. <强>动作

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

    =

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

    1. 添加$ cp /usr/share/vim/vim73/syntax/html.vim ~/.vim/syntax/html.vim 语法组的定义

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

      htmlEqualSign
    2. syn match htmlEqualSign contained "=" 添加到htmlEqualSign群组

      htmlTag的第40行应更改为:

      ~/.vim/syntax/html.vim

      为:

      syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
      
    3. 最后一步是编辑您的colorscheme,以便按照您想要的方式着色syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,htmlEqualSign 。你可以通过在colorscheme中的某处添加这一行来实现:

      =

      当然,您可以选择颜色。

      但我认为您希望hi htmlEqualSign guifg=#00ff00 =颜色相同(从您的问题中不太清楚)。为此,我们将id组“链接”到用于属性的组。同样,htmlEqualSign非常有用:属性的语法组是:call SynStack(),因此要添加到colorscheme的行将是:

      htmlArg