我知道vim中的%会从一个标签跳转到另一个标签,我也知道如何使用可视模式在xml文件中选择标签之间的整个块,使用 o 从顶部标签跳到底部标签。
我已经完成了多次网络搜索,并使用.vimrc中的以下行安装了matchit插件:
filetype plugin on
runtime macros/matchit.vim
我找到this post,并尝试过closetag.vim。
我查看了大量的xml文件,即使有多个显示器(和眼镜),也会发现折叠文件的某些部分很有用。
答案 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'
,za
或zr
等命令管理每一行的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
和朋友可立即进行折叠。