【问题标题】:Showing hierarchy of nested closed folds in Vim在 Vim 中显示嵌套闭合折叠的层次结构
【发布时间】:2015-02-20 14:08:29
【问题描述】:
我的文件中有 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
这可能吗?
【问题讨论】:
标签:
vim
folding
code-folding
【解决方案1】:
没有。由于 Fold2 包含在 Fold1 中,因此整个外部 Fold1 将折叠成一行。您只能编写一个自定义的'foldtext' 表达式来检查包含的折叠,并将该信息放入单个摘要行中。 (我不确定这样的表达式是否会通过遍历所有包含的折叠来占用太多性能。)
为了概览折叠,我通常通过zM 关闭所有折叠,然后通过zr 重复打开关卡。
【解决方案2】:
Ingo 是正确的,它不能在当前缓冲区内完成。 但是您可以在另一个缓冲区或输出命令缓冲区中将其作为 print 来实现。
以下命令获取所有折叠线,中间没有正文:
:g/{{{/
它适用于下面带有 foldmethod=marker 和默认 ({{{) mark 的示例(包含嵌套折叠):
"Fold 1{{{
Fold level 1 text
"Fold2 {{{
Fold level 2 text
"}}}
"}}}
运行:g/{{{/ 命令后,您会得到:
"Fold 1{{{
"Fold2 {{{
如果你想将结果重定向到一个新的缓冲区,那么你可以运行:
:让@a='' |执行 'g/{{{/y A' |新 |设置本地 bt=nofile |放!一个
它提取 {{{ 模式以注册“a”,打开一个新缓冲区并粘贴 reg。如果您的默认设置为“折叠折叠”,您可能需要使用 zR 展开结果。
请参阅this 其他答案以及更大的示例文本。