1

我的文件中有 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

那可能吗?

4

2 回答 2

1

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

为了概览折叠,我通常通过 关闭所有折叠zM,然后通过 重复打开关卡zr

于 2014-12-22T13:15:44.510 回答
1

Ingo 是对的,它不能在当前缓冲区内完成。但是您可以将其作为在另一个缓冲区或输出命令缓冲区中的打印来实现。以下命令获取所有折叠线,中间没有正文:

:g/{{{/

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

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

运行:g/{{{/命令后,您会得到以下信息:

"Fold 1{{{
"Fold2 {{{

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

:让@a='' | 执行 'g/{{{/y A' | 新 | 设置本地 bt=nofile | 放!一个

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

请使用更大的示例文本查看其他答案

于 2014-12-22T23:34:49.653 回答