如何使用 vim 自动折叠文件中的所有函数?

Posted

技术标签:

【中文标题】如何使用 vim 自动折叠文件中的所有函数?【英文标题】:How can I automatically fold all functions in a file with vim? 【发布时间】:2011-06-01 08:50:20 【问题描述】:

首先,我使用 set foldmethod=marker,并将光标移动到一个函数的 ,使用 zf% 折叠当前函数。但是这个文件中有很多功能。如何折叠此文件中的所有功能?而且我不想在函数中折叠 。

【问题讨论】:

仅供参考的 vim 发行版通常带有嵌入式帮助。如果您输入:help fold,您可以看到所有与折叠相关的内容。 您必须添加您感兴趣的语言(并非所有语言都以 开头!);在 Vim 中折叠是一个独立的话题。 【参考方案1】:

我试图做同样的事情,结果只是做了:

setlocal foldmethod=marker
setlocal foldmarker=,

它使用标记折叠方法并将标记更改为单个花括号(默认标记为)。

【讨论】:

我喜欢它,非常方便!但我应该拆分关闭一个大括号并打开另一个大括号的行(如“ else ”)【参考方案2】:

试试:%g/\(function\_.\-\)\@<=/ normal! fzf%

一点一点解释:

:%g - 在整个文件中全局搜索

/\(function\_.\-\)\@<=/ - 在任何“函数”之后查找第一个“”并将光标放在带有该“”的字符串开头的模式

normal! fzf% - 向前执行到 '' f 并在该字符串上使用 move '%' zf% 折叠

【讨论】:

无法让您的命令工作 - 可能显示示例函数 如何在函数后面包含下一行(空)?【参考方案3】:
set foldlevel=0

将从一开始就折叠所有东西,要折叠的是什么。根据语言和您的折叠功能,折叠的内容会有所不同。

【讨论】:

zM 做同样的事情。【参考方案4】:

我在寻找类似的东西时遇到了这个问题。你现在显然已经想通了,但为了其他人的利益,我还是会回答它。

你需要在你的 .vimrc 中加入以下几行:

set foldmethod=syntax
set foldnestmax=1

【讨论】:

【参考方案5】:

如果每个函数的第一列都有左大括号,你可以这样做:

:%g/^/normal! zf%

也许这样更清楚:

:%g /^/ normal! zf%

g 命令根据以下模式选择行,并执行 ex 命令(此处normal! 用于播放普通模式击键)。

:help :g:help :normal

【讨论】:

我用这个——谢谢,但是你怎么能避免它跨函数折叠呢?似乎不仅仅是功能【参考方案6】:

如果您:set foldmethod=syntax,则将从语法定义中指定折叠。如果您愿意,可以:set foldmethod=indent 让缩进定义折叠。

您可以使用zM 关闭所有折叠。如果您有嵌套折叠并且想要逐层折叠,请使用zm。要打开折叠,请使用zR(全部)和zr(逐级)。

【讨论】:

我想你误解了我的意思。首先,我需要为每个功能设置折叠。我只想知道如何在第一次为所有功能设置折叠。 @Yongwei:好的,我想我现在明白了。这是你想要的吗? 它说“未找到折叠” 对于那些想知道如何记住zmzr 的人,official documentation 表示它是“更多”和“减少”。 (仍然不是很直观,但与 vim 世界中的大多数事情一样,它就是这样。) 仅供参考,在他们的文档中,他们提到所有折叠命令都以 'z' 开头。如果从侧面看,它看起来像折叠的纸。

以上是关于如何使用 vim 自动折叠文件中的所有函数?的主要内容,如果未能解决你的问题,请参考以下文章

vim中的折叠功能

Vim:仅折叠顶层折叠

如何在 Vim 中启用自动折叠?

vim 配置文件 ,高亮+自动缩进+行号+折叠+优化

关于 vim 折叠的困惑 - 如何禁用?

Vim Markdown 折叠?