我正在使用带有latex-suite插件的vim。
我有一段文字,我希望将其放在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样本,我不想缩进它们或手动封装在环境中。
答案 0 :(得分:1)
执行此操作的一种方法是在Tex语法中嵌入XML语法,然后对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}部分但包括&lt;?xml可能有点过分,但以防万一你想要它可能值得拥有的其他非xml详细区域。
之后,此代码段会使用runtime indent/xml.vim
导入XML缩进规则。 XML由表达式XmlIndentGet缩进,但不是这样,缩进表达式设置为包装函数TexXML
。这将检查当前行是否“看起来像xml”,如果是,则将其缩进为XML,否则使用当前缩进。对于看起来像XML的行,函数只是检查语法高亮是否匹配“xml”。
您需要使用语法高亮显示才能生效。