显示Vim中嵌套闭合折叠的层次结构

时间:2014-12-22 13:04:54

标签: vim folding code-folding

我的文件中有3个级别的折叠,所有这些折叠都是使用{{{ }}}创建的,即:

"Fold 1{{{
Fold level 1 text
"Fold2 {{{
Fold level 2 text
"}}}
"}}}

我希望看到Vim中闭合折叠的层次结构,即:

+-- 1 Line: Fold 1
+---- 1 Line: Fold 2 " this could be indented

这可能吗?

2 个答案:

答案 0 :(得分:1)

没有。由于Fold2包含在Fold1中,因此整个外部Fold1将折叠为单行。您只能编写一个自定义'foldtext'表达式来检查包含的折叠,并将该信息放入单个摘要行中。 (我不确定这样的表达式是否会通过遍历所有包含的折叠来占用太多的表现。)

要概述折叠,我通常会通过zM关闭所有折叠,然后通过zr重复打开关卡。

答案 1 :(得分:1)

Ingo是正确的,它无法在当前缓冲区内完成。 您可以在另一个缓冲区或输出命令缓冲区中将其作为 print 来实现。 以下命令获取所有折叠行,其中没有正文:

:g/{{{/

它适用于下面的示例(包含嵌套折叠), foldmethod = marker 和默认({{{)标记

"Fold 1{{{
Fold level 1 text
"Fold2 {{{
Fold level 2 text
"}}}
"}}}

运行:g/{{{/命令后,您会看到:

"Fold 1{{{
"Fold2 {{{

如果要将结果重定向到新缓冲区,则可以运行:

:让@a ='' |执行' g / {{{/ y A' |新的| setlocal bt = nofile |放!

它将{{{模式注册到" a",打开一个新缓冲区并粘贴注册表。如果您的默认设置为“折叠折叠”,则可能需要使用zR展开结果。

请参阅this其他答案,并附上更大的示例文字。