我知道在vim中使用%可以在标签之间跳转,我也知道如何使用可视模式选择xml文件中标签之间的整个块,并使用o跳转到顶部和底部的标签。
我已经进行了多次网络搜索并安装了matchit插件,使用以下行在我的.vimrc文件中:
filetype plugin on
runtime macros/matchit.vim
我找到了这篇帖子,并尝试了closetag.vim。
我需要查看大型的XML文件,即使有多个显示器和眼镜,折叠文件中的某些部分也很有用。
我知道在vim中使用%可以在标签之间跳转,我也知道如何使用可视模式选择xml文件中标签之间的整个块,并使用o跳转到顶部和底部的标签。
我已经进行了多次网络搜索并安装了matchit插件,使用以下行在我的.vimrc文件中:
filetype plugin on
runtime macros/matchit.vim
我找到了这篇帖子,并尝试了closetag.vim。
我需要查看大型的XML文件,即使有多个显示器和眼镜,折叠文件中的某些部分也很有用。
缩进方法对我来说几乎有效,但我发现它的工作方式有点奇怪;基本上,它是根据标签内部内容而不是标签本身进行折叠的。这个对我很有用,来自Vim维基:
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">------------------------------------
syntax on
。 - Paul:e
)文件以使au
命令生效。 - Terry Brownaugroup 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'
syntax
折叠方法或(我个人认为更好的)重新格式化并使用indent
。 - romainlsyntax
折叠方法在折叠时更能显示父标签而不是第一个子标签。 - dctucker这是从 @adam_0 的答案中提取的,但使用 autocmd(根据 @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
:%foldopen!
命令会在文件加载时将所有折叠打开,以便所见即所得。但如果需要,zM
等命令也可以立即用于折叠。
autocmd FileType xml,ui,xhtml,html
命令来激活多个文件。 - albfanautocmd FileType xml normal zR
替换autocmd FileType xml :%foldopen!
。 - phcerdan
o
键在匹配的标签之间跳转的?这将非常有用,但在可视模式下按o
不起作用! - Shahbaz