如何使用 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:好的,我想我现在明白了。这是你想要的吗? 它说“未找到折叠” 对于那些想知道如何记住zm
和zr
的人,official documentation 表示它是“更多”和“减少”。 (仍然不是很直观,但与 vim 世界中的大多数事情一样,它就是这样。)
仅供参考,在他们的文档中,他们提到所有折叠命令都以 'z' 开头。如果从侧面看,它看起来像折叠的纸。以上是关于如何使用 vim 自动折叠文件中的所有函数?的主要内容,如果未能解决你的问题,请参考以下文章