当我在 Vim 中寻找合适的 html 标签突出显示时,我发现了这篇文章。但是在查看了 romainl 的答案(和他的截图)和 html 语法文件之后,我想知道如何在不改变 html 标记颜色的情况下更改属性后 = (等号)的颜色以匹配属性的颜色?
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()获得正确的语法组。反射
根据我们迄今为止收集到的信息,很明显标签名称 (
['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 语法文件和你的颜色方案,牛仔风格。行动
第一步是制作默认 HTMl 语法文件的本地副本:
$ cp /usr/share/vim/vim73/syntax/html.vim ~/.vim/syntax/html.vim下一步是编辑此文件。我们将执行两个更改:
添加
htmlEqualSign语法组的定义第 44 行应该是(注意!未经彻底测试。):
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至:
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