Один из способов сделать это - встроить синтаксис XML в синтаксис Tex, а затем использовать правила отступа XML для кода XML, как это определено атрибутом выделения синтаксиса рассматриваемых строк.
С этим вы можете просто выполнить отступ =
над регионом, и он должен делать правильные отступы. Или, может быть, даже это будет правильно делать отступ в первый раз.
Сначала создайте каталог .vim/after/syntax/tex
и добавьте следующий код как .vim/after/syntax/tex/xmlembed.vim
:
if exists("b:current_syntax")
unlet b:current_syntax
endif
syn include @XML syntax/xml.vim
syn region XMLEmbedded matchgroup=XMLCommand
\ start=+\\begin{verbatim}\n\+<?xml+rs=s+16
\ skip=+\\$+
\ end=+\\end{verbatim}+ contains=@XML
syn cluster texZone add=XMLEmbedded
hi def link XMLCommand texZone
func! TexXML(lnum)
let name = tolower(synIDattr(synID(a:lnum, 1, 1), "name"))
if name =~ 'xml'
return XmlIndentGet(a:lnum, 1)
endif
return -1
endfunc
runtime indent/xml.vim
set indentexpr=TexXML(v:lnum)
Что включает в себя подсветку синтаксиса XML как @XML и определение области, ограниченной началом / концом (а также соответствие части \ begin {verbatim}, но включение <? Xml, возможно, излишне, но на всякий случай другие подробные регионы, отличные от xml, возможно, стоит иметь. </p>
После этого этот фрагмент импортирует правила отступа XML с runtime indent/xml.vim
. XML имеет отступ с помощью выражения XmlIndentGet, но вместо этого выражение с отступом устанавливается на функцию-оболочку TexXML
. Это проверяет, выглядит ли текущая строка как xml и, если это так, имеет отступ, как XML, в противном случае использует текущий отступ. Чтобы строка выглядела как XML, функция просто проверяет, соответствует ли подсветка синтаксиса "xml".
Вам нужно включить подсветку синтаксиса, чтобы это работало.