Подсветка разделов LaTeX в vim - PullRequest
1 голос
/ 10 сентября 2011

В LaTeX раздел выглядит так:

\section{Section Title}

Я бы хотел выделить такие разделы или заголовки разделов. Я попытался поместить в ~/.vim/bundle/latexrc/after/syntax/tex.vim следующее:

syn match texSectioning "\\section\>" skipwhite nextgroup=texSectioningTitle
syn region texSectioningTitle       contained matchgroup=Delimiter start='{'    end='}' contains=@texSectioningGroup
syn cluster texSectioningGroup      contains=texMatcher,texComment,texDelimiter

(Обратите внимание, что этот тип синтаксиса не обрабатывается файлом синтаксиса tex.vim по умолчанию. Он определяет только «зоны раздела», которые для меня практически бесполезны.)

Затем я определяю следующее в моей цветовой схеме:

hi texSectioning gui=bold guifg=red

И ничего не происходит; то есть заголовки разделов не отображаются красным цветом в моем коде LaTeX (даже после полной перезагрузки файла).

Я совершенно не понимаю, как работает синтаксис vim и как его отлаживать.

Редактировать Еще немного информации: иногда это работает, а иногда нет. Совершенно непредсказуемо . В чем может быть проблема? Возбудитель? Что-то другое? Я полностью озадачен.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2011

Вот ответ: tex.vim делит текст на зоны, в которых синтаксис должен быть явно разрешенным.Ключевым элементом этой команды является:

syn cluster texChapterGroup contains=@texSectioningGroup

. Это говорит vim, что внутри texChapterGroup допускается синтаксический кластер texSectioningGroup.Следующее, что нужно сделать, это просто определить этот кластер как обычно.

Другая деталь заключается в том, что регион texSectioningTitle должен быть contained, в противном случае он будет соответствовать произвольным парам {} в LaTeX.

Итак, полное решение выглядит следующим образом:

syn match texSectioningCommand '\\section\>' skipwhite     nextgroup=texSectioningTitle contains=@texSectioningGroup
syn region texSectioningTitle        start='{'  end='}' contained
syn cluster texSectioningGroup contains=texSectioningCommand
syn cluster texChapterGroup contains=@texSectioningGroup

Редактировать Вот почему поведение было непредсказуемым: vim не читает весь файл, чтобы выяснить синтаксис.Таким образом, в достаточно большой главе мой синтаксис раздела будет работать, потому что vim не зашел достаточно далеко, чтобы увидеть, что он находится в зоне главы.

0 голосов
/ 15 января 2017

Просто чтобы обновить информацию, чтобы выделить раздел легко.Использование containsin означает, что все другие совпадения синтаксиса содержат это новое совпадение синтаксиса.Затем просто определите желаемый цвет.

syn match texSectioningCommand '\\section\>' containedin=ALLBUT,texComment
hi texSectioningCommand guifg=#ec5f67 ctermfg=203

В качестве альтернативы можно добавить простое новое совпадение синтаксиса в texFoldGroup для оценки внутри документа блока.

syn match texSectioningCommand '\\section\>'
syn cluster texFoldGroup add=texSectioningCommand
hi texSectioningCommand guifg=#ec5f67 ctermfg=203
0 голосов
/ 11 сентября 2011

Вы определили новые элементы синтаксиса texSectioning, texSectioningTitle и texSectioningGroup, но вы не связали их с группой подсветки, поэтому Vim не знает, как их отобразить. Попробуйте добавить эти строки:

hi def link texSectioning Statement
hi def link texSectioningTitle String
hi def link texSectioningGroup Comment

Раскраски Statement, String и Comment определяются используемой вами цветовой схемой. Это всего лишь примеры: вы можете заменить их любой группой, определенной в файле цвета.

...