VIM:折叠当前块中的所有代码块
在大型PHP应用程序中,我希望折叠当前块中的所有代码块,而不是当前块本身。例如:VIM:折叠当前块中的所有代码块,vim,Vim,在大型PHP应用程序中,我希望折叠当前块中的所有代码块,而不是当前块本身。例如: if ($something) { if ($another) { // some code; } | <--THIS IS MY CURRENT CURSOR POSITION if ($yetAnother) { // more code; } if ($stillAnother) { // yet m
if ($something) {
if ($another) {
// some code;
}
| <--THIS IS MY CURRENT CURSOR POSITION
if ($yetAnother) {
// more code;
}
if ($stillAnother) {
// yet more code;
}
}
if($something){
若有(另加){
//一些代码;
}
|看看这是否有效:
:set foldmethod=marker foldmarker={,} foldlevel=2
我能想到的最接近的东西是zMzv。它将关闭所有折叠(zM),然后打开足够的折叠以查看光标所在的行(zv)。如果需要,您可以将其映射到较短的命令
这不完全是你想要的,因为它也会关闭你的外部if
语句之外的所有折叠。如果我答对了问题,语句中描述的折叠变化
相当于以下操作序列
关闭当前折叠(光标位于其中)
递归关闭刚刚关闭的折叠中的所有折叠
打开当前折叠,保持内部折叠关闭
映射
:nnoremap <silent> <leader>f m`zcVzCzo``
:nnoremap f m`zcVzCzo``
因此,运行与上述步骤对应的命令,
在完成之前保存光标位置,然后再恢复。您是否已经在使用foldmethod=syntax/indent?我必须foldlevel=1
,但效果非常好。我从未想过将foldmarker覆盖到如此琐碎的内容。它在实践中有缺点吗?我从来没有遇到过一个字符fol的问题d标记,但那只是个轶事。谢谢,似乎foldmarkers实际上给我带来了麻烦。按照你的建议覆盖它们会有所帮助。谢谢。关闭外部if
语句之外的所有折叠是一个功能,而不是一个bug!不过我必须覆盖foldmarkers。