在vim中折叠(扩展和缩放)xml标签(xml解析)

时间:2015-08-22 09:01:37

标签: vim xml-parsing macvim

我知道vim中的会从一个标签跳转到另一个标签,我也知道如何使用可视模式在xml文件中选择标签之间的整个块,使用 o 从顶部标签跳到底部标签。

我已经完成了多次网络搜索,并使用.vimrc中的以下行安装了matchit插件:

filetype plugin on
runtime macros/matchit.vim

我找到this post,并尝试过closetag.vim。

我查看了大量的xml文件,即使有多个显示器(和眼镜),也会发现折叠文件的某些部分很有用。

默认情况下是否有办法在MacVim或vim中的标签之间折叠和展开?或者使用插件?

3 个答案:

答案 0 :(得分:16)

缩进方法几乎对我有用,但我发现它的工作方式有点奇怪;实质上,它折叠在标签的内容而不是标签本身。这对我有用,来自the Vim wiki

let g:xml_syntax_folding=1
au FileType xml setlocal foldmethod=syntax

此方法折叠实际标记本身,例如:

<MyLines group="first">
    <Foo value="1"/>
    <Foo value="2"/>
    <Foo value="3"/>
</MyLines>
<MyLines group="second">
    <Foo value="4"/>
    <Foo value="5"/>
    <Foo value="6"/>
</MyLines>

在第1行或第5行输入zc后看起来像这样:

+--  5 lines: <MyLines group="first">------------------------------------
<MyLines group="second">
    <Foo value="4"/>
    <Foo value="5"/>
    <Foo value="6"/>
</MyLines>

而不是:

+-- 10 lines: <MyLines group="first">------------------------------------

答案 1 :(得分:10)

您需要的功能称为“折叠”。

基本上,您告诉Vim使用其中一个可用的'foldmethod'并使用'foldlevel'zazr等命令管理每一行的zM。您可以在:help folding找到所有详细信息。

将这些行添加到vimrc应该是一个很好的起点:

augroup XML
    autocmd!
    autocmd FileType xml setlocal foldmethod=indent foldlevelstart=999 foldminlines=0
augroup END

使用这些设置,加载文件时应打开所有折叠,每行的折叠级别应来自其缩进,您应该能够折叠单行。

使用zm折叠更多,zr折叠更少,zc折叠,zo打开折扣,za在这些折叠之间切换两个州,zM关闭每个折叠,zR打开它们等等......

文档:

:help folding
:help 'foldmethod'
:help 'foldlevelstart'
:help 'foldminlines'

答案 2 :(得分:6)

这取自@ adam_0的答案,但使用自动命令(根据@ romani的答案),并根据@Paul评论包含syntax on。< / p>

augroup XML
    autocmd!
    autocmd FileType xml let g:xml_syntax_folding=1
    autocmd FileType xml setlocal foldmethod=syntax
    autocmd FileType xml :syntax on
    autocmd FileType xml :%foldopen!
augroup END

最后的:%foldopen!行打开所有折叠,以便在加载文件时文件为WYSWIG。但如果您愿意,zM和朋友可立即进行折叠。