所以这可能在几次之前被问过,但是没有一个明确的答案。在vim中折叠html块。
采取以下标记
<html>
<body>
<section>
<ul>
<li></li>
<li></li>
</ul>
</section>
<section>
<ul>
<li></li>
<li></li>
</ul>
</section>
</body>
</html>
如果你将vim的折叠设置为缩进并尝试折叠其中一个部分元素,则两者都会折叠成折叠。不理想。相反,我一直在做的是折叠每个部分的内容。
我想要的是将各个部分元素折叠到它们自己的块中。
现在将foldmenthod设置为语法,然后使用zfat
工作,但这是很多按键操作。
相反,是否可以根据开/关块进行折叠? 到目前为止,我发现这个区域基于XML,也可以用于html,但我对如何使用它感到迷茫。
syn region XMLFold start=+^<\([^/?!><]*[^/]>\)\&.*\(<\1\|[[:alnum:]]\)$+ end=+^</.*[^-?]>$+ fold transparent keepend extend
任何想法,如果这可行或有更好的选择?
修改
我目前所拥有的。
autocmd FileType html setlocal foldmethod=indent
autocmd FileType html setlocal fdl=3
如果我在任一部分元素上切换折叠,它会将所有部分折叠成一个折叠
<html>
<body>
<section>…
</body>
</html>
相反,它只应为每个单独的section或div元素切换一个折叠。
<html>
<body>
<section>…
<section>…
</body>
</html>
答案 0 :(得分:1)
我有点不确定你想要实现的目标,但如果你设置了
autocmd FileType html setlocal foldmethod=indent
autocmd FileType html setlocal fdl=3
你应该得到以下:
<html>
<body>
<section>
<ul>
+---- 2 lines: <li></li>-------
</ul>
</section>
<section>
<ul>
+---- 2 lines: <li></li>-------
</ul>
</section>
</body>
</html>
如果没有,您的某些设置可能已关闭。例如
foldlevel是根据行的缩进计算的,除以 &#39; shiftwidth的&#39; (向下舍入)。一系列具有相同或的线条 较高的折叠水平形成折叠,具有较高水平的线条 形成一个嵌套的折叠。
所以这取决于你的shiftwidth如何计算水平。在您的情况下,您的设置应该是
set shiftwidth=2
获得上述结果。要切换标签的折叠,请使用za
。对于其他选项,请阅读:h fold-commands
(这很好而且很广泛)。另一个不错的选择是foldcolumn
(尝试set foldcolumn=4
)。