尽管使用Vim十年,有时我仍然在努力折叠。此问题中的所有内容都是可重现的,Vim 7.3中没有.vimrc。我正在使用foldmethod = marker和默认的foldmarkkers。
考虑以下嵌套折叠结构(使用foldmethod = marker和默认标记)。第一列是行号(fold0具有零缩进)。
1|{{{ fold0
2| {{{ fold1
3| {{{ fold2
4| }}}
5| }}}
6|}}}
假设fold1
和fold2
都已关闭且光标位于第2行。我可以使用yyp
猛拉并放置关闭的折叠,但新插入的折叠全部打开。
我想要的是关闭“put”命令产生的折叠。或者,有没有方便的方法在“放”后关闭它们?也就是说,从这个位置(光标在第6行):
1|{{{ fold0
2|+--- 4 lines: fold1----------------------------------------
6| {{{ fold3
7| {{{ fold4
8| }}}
9| }}}
10|}}}
我可以使用zc
关闭fold3,但折叠4在zo
之后仍然打开。如果我使用zC
,它会关闭fold3并折叠0,但当我执行2zo
时折叠4仍然打开。这不是我期望递归折叠关闭工作的方式。有没有办法实现zc
,但也递归关闭所有包含的折叠?
我工作的公司指定折叠是通过匹配对来定义的,没有明确的折叠级别,因此涉及显式折叠级别的解决方案是没有用的。
答案 0 :(得分:2)
以下序列(在你的 y y p 之后)似乎做你想做的事:
v % - 从光标下的{
直观地选择相应的}
z C - 递归地关闭光标下的所有折叠(不幸的是,这包括你想要保持打开的外部折叠)
z v - 打开足够的折叠以显示光标线
z c - 关闭新材料的单个外部折叠
当然,您需要将其映射到vimrc中的其他组合键。