Пользовательский синтаксис Vim HTML - PullRequest
7 голосов
/ 11 марта 2011

У меня есть скрипт, который читает файл HTML и заменяет вхождения ~%foo%~ значением, установленным Perl.Примерно так:

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

выдаст в браузере что-то вроде этого:

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

Правильно, поэтому я хочу использовать подсветку синтаксиса Vim для различения вхождений ~%foo%~ в HTML,По умолчанию подсветка синтаксиса 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 Ответ

2 голосов
/ 01 октября 2012

Проблема в том, что 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.

...