VIM:折叠当前块中的所有代码块

时间:2012-01-04 22:20:21

标签: vim

在一个大型PHP应用程序中,我想要折叠当前块中的所有代码块,而不是当前块本身。例如:

if ($something) {

    if ($another) {
        // some code;
    }

    | <--THIS IS MY CURRENT CURSOR POSITION

    if ($yetAnother) {
        // more code;
    }

    if ($stillAnother) {
        // yet more code;
    }

}

如何折叠三个内if而不是外if

谢谢!

3 个答案:

答案 0 :(得分:4)

看看是否有效:

:set foldmethod=marker foldmarker={,} foldlevel=2

答案 1 :(得分:2)

如果我的问题是正确的,那么声明中描述的折叠变化 相当于以下行动顺序。

  1. 关闭当前折叠(光标所在的位置)。
  2. 递归地关闭刚关闭的所有折叠。
  3. 打开当前折叠,保持内部折叠关闭。
  4. 映射

    :nnoremap <silent> <leader>f m`zcVzCzo``
    

    因此运行与上述步骤相对应的命令, 在完成之前保存光标位置,并在之后恢复它。

答案 2 :(得分:1)

我能想出的最接近的是 zMzv 。这将关闭所有折叠( zM ),然后打开足够的折叠以查看光标所在的行( zv )。如有必要,您可以将其映射到较短的命令。

这并不是你要求的,因为它会关闭你的外if语句之外的所有折叠。