2011-03-10 74 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文件。