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

Dee*_*bek 16 vim macvim xml-parsing

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

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

filetype plugin on
runtime macros/matchit.vim
Run Code Online (Sandbox Code Playgroud)

我找到了这篇文章,并尝试过closetag.vim.

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


有没有办法在默认情况下或通过使用插件折叠和扩展MacVim或vim中的标签之间的部分?

ada*_*m_0 19

缩进方法几乎对我有用,但我发现它的工作方式有点奇怪; 实际上,它折叠在标签的内容上而不是标签本身.这对我来说很有用,来自Vim维基:

let g:xml_syntax_folding=1
au FileType xml setlocal foldmethod=syntax
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

+--  5 lines: <MyLines group="first">------------------------------------
<MyLines group="second">
    <Foo value="4"/>
    <Foo value="5"/>
    <Foo value="6"/>
</MyLines>
Run Code Online (Sandbox Code Playgroud)

代替:

+-- 10 lines: <MyLines group="first">------------------------------------
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题,只记得添加`syntax on` (2认同)

rom*_*inl 12

您需要的功能称为"折叠".

基本上,你告诉Vim使用其可用的一个'foldmethod'和管理各行的'foldlevel'与像命令za,zrzM.你可以找到所有细节:help folding.

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

augroup XML
    autocmd!
    autocmd FileType xml setlocal foldmethod=indent foldlevelstart=999 foldminlines=0
augroup END
Run Code Online (Sandbox Code Playgroud)

使用这些设置,加载文件时应打开所有折叠,每行的折叠级别应从其缩进中派生,您应该能够折叠掉单行.

使用zm折叠更多,zr折少,zc关闭折叠,zo打开它,za以这两个状态之间进行切换,zM关闭所有的折叠,zR打开它们等等...

文档:

:help folding
:help 'foldmethod'
:help 'foldlevelstart'
:help 'foldminlines'
Run Code Online (Sandbox Code Playgroud)


ron*_*nen 8

这取自@adam_0的答案,但使用自动命令(根据@ romani的答案),并按照@Paul syntax on的评论包含.

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
Run Code Online (Sandbox Code Playgroud)

最后:%foldopen!一行打开所有折叠,以便在加载文件时文件是WYSWIG.但是zM如果你愿意的话,朋友们可以立即进行折叠.