Vim folding - 在光标下递归关闭所有子节点

时间:2014-02-07 17:15:11

标签: vim folding

我知道如何使用zO打开光标下的所有折叠。

但是如何反向?

我想要za之类的东西,但也有递归性。

PS。我知道有zC,但它关闭了与当前行相关的所有父对折,我想要关闭子对象。

4 个答案:

答案 0 :(得分:4)

  1. 关闭父级折叠
  2. 选择关闭折叠和下一行
  3. :foldc! - 关闭范围`<,`>中的所有折叠(阅读:h foldc
  4. 您显然可以映射该序列。

答案 1 :(得分:2)

我实际上没有找到这个问题的确切答案,但是在某些情况下,一些可以解决问题的命令是:

  • zM:递归关闭根褶及其所有子代
  • zm:将折叠级别增加1,即关闭尚未折叠的最里面的折叠级别

相反的命令是:

  • zR:所有折叠都是开放的
  • zr:将折叠级别降低一个

答案 2 :(得分:0)

注意:该问题仅涉及当前子女。即关闭/打开直到当前的折叠水平,而不是一直以zCzOzAzMzR的形式出现。

仅折叠当前的孩子递归

zx折叠:撤消手动打开和关闭的折叠:重新应用 'foldlevel',然后执行“ zv”:查看光标行。 还强制重新计算折叠。使用时这很有用 'foldexpr'并且缓冲区的更改方式导致 折叠无法正确更新。

zc关闭折叠后的文字

我认为您想将两者结合起来

  1. 转到父亲折叠级别的一行
  2. 按(在正常模式下)按zxzc。或重新映射它:nnoremap zxc zxzc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

仅显示当前递归的孩子

顺便说一句: 相反,打开所有子代递归:zczA

积分:https://vi.stackexchange.com/a/16046/29452

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

仅取消/折叠选定的递归

或打开/关闭递归折叠的所需范围

  1. 直观地选择范围。
  2. :foldo(与之前的link一样)或:foldc(与@majkinetor answer一样)。

提示以可视方式选择范围

]z jump to end of current open fold.
[z jump to beginning of current open fold.
zj moves the cursor to the next fold.
zk moves the cursor to the previous fold.

要在Vim中跳过闭合的褶皱:https://stackoverflow.com/a/9407015/9391770(我尚未对其进行测试)

答案 3 :(得分:0)

我也有很长时间了,我发现最接近的解决方案是使用zM递归关闭所有折叠,然后使用zv重新打开光标先前位置的行(收折前)。也许有帮助。

致谢。