2011-03-10 75 views
7

我有一个脚本读取HTML文件,并用Perl设置的值替换~%foo%~的出现次数。事情是这样的:自定义Vim HTML语法

<span class="~%classname%~">~%hi_mom%~</span> 

会产生这样的浏览器:

<span class="classyclass">Hello World</span> 

右,所以我想使用Vim的语法高亮区分在HTML中出现~%foo%~。默认情况下,HTML语法突出显示将使HTML元素的属性值为Magenta,我希望~%foo%~部分为DarkMagenta。我在正确的轨道上,因为如果我注释掉tokenQuoted行(或令牌行),我会得到期望的结果,但如果匹配和高亮未注释,则令牌突出显示将覆盖tokenQuoted突出显示。

syntax match token  containedin=ALLBUT,htmlString,htmlValue '\~%[^%]\+%\~' 
syntax match tokenQuoted containedin=htmlString,htmlValue  '\~%[^%]\+%\~' 
" tokenQuoted assumes htmlString/htmlValue (:highlight String) is Magenta 
highlight token   term=none ctermfg=White  guifg=White 
highlight tokenQuoted term=none ctermfg=DarkMagenta guifg=DarkMagenta 

我在默认html.vim后采购工作的文件通过 autocmd *.html ~/.vim/syntax/html.vim.vimrc来源。

+1

+1使用vim – ejohansson 2012-09-27 20:24:38

+0

我想你忘了问一个问题。问题是什么?你在看什么?你想看到什么? – 2012-10-01 10:00:47

回答

2

问题是token匹配没有被排除在tokenQuoted匹配中。要获得所需的结果,即突出显示与非引号标记不同的引用标记,请在语法文件中使用以下内容。

syntax match token  containedin=ALLBUT,htmlString,htmlValue,tokenQuoted '\~%[^%]\+%\~' 
syntax match tokenQuoted containedin=htmlString,htmlValue  '\~%[^%]\+%\~' 
highlight token   term=none ctermfg=White  guifg=White 
highlight tokenQuoted term=none ctermfg=DarkMagenta guifg=DarkMagenta 

或者,如果使用语法区域而不是匹配是合理的,请将上面的语法匹配行替换为以下内容。

syntax region token  contained start=+\~%+ end=+%\~+ containedin=ALLBUT,htmlString,tokenQuoted 
syntax region tokenQuoted contained start=+\~%+ end=+%\~+ containedin=htmlString 

我想我还应该提到的是,当我在测试这个,我刚刚创建的文件~/.vim/syntax/html.vim并添加上述内容。没有必要添加任何东西到我的.vimrc文件。