не удаляйте начальные пробелы при заключении текста в среду с использованием пакета латекса vim - PullRequest
1 голос
/ 29 сентября 2011

Я использую vim с плагином latex-suite. У меня есть фрагмент текста, который я хочу вложить в verbatim среду. Допустим, это выглядит так:

<?xml version="1.0" encoding="UTF-8"?>  
<errors>  
  <error>Record not found</error>  
</errors>

Поэтому я визуально выбираю текст, нажимаю <F5>, набираю verbatim и нажимаю <CR>. Я получаю:

\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<errors>
<error>Record not found</error>
</errors>
\end{verbatim}

И что я хочу получить:

\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error>Record not found</error>
</errors>
\end{verbatim}

Есть ли способ предотвратить попадание лидирующих пробелов в окружающую среду, используя этот механизм? У меня много образцов xml, и я не хочу делать отступ или вставлять их в окружение вручную.

1 Ответ

1 голос
/ 29 сентября 2011

Один из способов сделать это - встроить синтаксис 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".

Вам нужно включить подсветку синтаксиса, чтобы это работало.

...