尽管使用 Vim 已有十年,但有时我仍然为折叠而苦恼。在 Vim 7.3 中没有 .vimrc 的情况下,这个问题中的所有内容都是可重现的。我将 foldmethod=marker 与默认折叠标记一起使用。
考虑以下嵌套折叠结构(使用 foldmethod=marker 和默认标记)。第一列是行号(fold0 的缩进为零)。
1|{{{ fold0
2| {{{ fold1
3| {{{ fold2
4| }}}
5| }}}
6|}}}
假设fold1
和fold2
都关闭并且光标位于第 2 行。我可以使用 拉出并放置关闭的折叠yyp
,但新插入的折叠都是打开的。
我想要的是关闭“放置”命令产生的折叠。或者,是否有一种方便的方法可以在“放置”之后关闭它们?也就是说,从这个位置(光标在第 6 行):
1|{{{ fold0
2|+--- 4 lines: fold1----------------------------------------
6| {{{ fold3
7| {{{ fold4
8| }}}
9| }}}
10|}}}
我可以zc
用来关闭 fold3,但 fold 4 在zo
. 如果改为使用zC
,它会关闭 fold3 并折叠 0,但当我这样做时,折叠 4 仍然打开2zo
。这不是我期望递归折叠关闭的工作方式。有没有办法实现zc
但也递归地关闭所有包含的折叠?
我工作的公司指定折叠是通过匹配对来定义的,而没有明确的折叠级别,因此涉及显式折叠级别的解决方案是没有用的。