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

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

42678 次浏览

如果您的 :set foldmethod=syntax折叠将从语法定义中指定。如果你喜欢你可以 :set foldmethod=indent有压痕定义的折叠。

你可以用 zM关闭所有的折叠。如果你有嵌套的折叠,你想折叠一级一级,使用 zm。打开折叠使用 zR(所有)和 zr(水平逐级)。

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

:%g/^{/normal! zf%

也许这样更清楚:

:%g /^{/ normal! zf%

g命令根据以下模式选择行,并执行 ex 命令(在这里 normal!播放正常模式的击键)。

参见 :help :g:help :normal

我在找类似的东西时发现了这个。你现在肯定已经知道了,不过为了其他人着想,我还是会回答的。

您需要在.vimrc 中输入以下代码行:

set foldmethod=syntax
set foldnestmax=1
set foldlevel=0

将折叠一切从开始,什么是精神被折叠。根据不同的语言和你的折叠功能,折叠的内容会有所不同。

试试 :%g/\(function\_.\{-}\)\@<={/ normal! f{zf%

一点一点地解释:

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

/\(function\_.\{-}\)\@<={/-模式在任何“函数”之后首先找到“{”,并将光标放在以“{”开头的字符串上

向前执行到“{”f{,并在该字符串上使用 move’%’zf%折叠

我也想做同样的事情,结果只是做了:

setlocal foldmethod=marker
setlocal foldmarker={,}

它使用标记折叠方法并将标记更改为单个花括号(默认情况下,标记是 \{\{{)。