当我在Vim中寻找正确的html标签突出显示时,我发现了post。但在查看了romainl的答案(以及他的截图)和html语法文件之后,我想知道如何在属性之后更改=(等号)的颜色以匹配属性的颜色而不更改html标签的颜色?
答案 0 :(得分:8)
<强>探索强>
这是我在某处(很久以前,可能在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']
(div
,h1
...)的颜色是通过特殊语法定义的名为p
的群组,其继承自htmlTagName
。
某些替代/自定义语法文件可能会定义名称略有不同的其他语法组,因此我的示例仅对我有效。您必须使用htmlTag
来获取正确的语法组。
<强>的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,牛仔风格。
<强>动作强>
第一步是制作默认HTMl语法文件的本地副本:
=
下一步是编辑此文件。我们将进行两项更改:
添加$ cp /usr/share/vim/vim73/syntax/html.vim ~/.vim/syntax/html.vim
语法组的定义
第44行应该是(注意!未经过彻底测试。):
htmlEqualSign
将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
最后一步是编辑您的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