一开始,我使用了 set foldmethod=marker 命令,并将光标移动到一个函数的 { 上,再使用 zf% 命令折叠当前函数。但是在此文件中有很多函数,如何折叠所有函数?而且我不想折叠函数内部的 {}。
:set foldmethod=syntax
,则折叠将根据语法定义来指定。如果你更喜欢根据缩进定义折叠,则可以运行:set foldmethod=indent
。zM
关闭所有折叠。如果你有嵌套的折叠,并且想逐级折叠,请使用zm
。要展开折叠,请使用zR
(全部)和zr
(逐级)。如果每个函数的左大括号都在第一列,你可以这样做:
:%g/^{/normal! zf%
或许这样更清晰明了:
:%g /^{/ normal! zf%
g
命令根据以下模式选择行,并执行 ex 命令(在这里使用 normal!
执行正常模式的按键)。
请参阅:help :g
和:help :normal
我也试着做了同样的事情,最终只是简单地执行了以下操作:
setlocal foldmethod=marker
setlocal foldmarker={,}
{{{
)。我在寻找类似东西时发现了这个问题。你肯定已经弄清楚了,但为了其他人的好处,我还是回答一下。
您需要在 .vimrc 文件中添加以下行:
set foldmethod=syntax
set foldnestmax=1
set foldlevel=0
将一切从头开始折叠,应该被折叠的东西。根据语言和您的折叠功能,fold的内容会有所不同。
尝试使用以下命令::%g/\(function\_.\{-}\)\@<={/ normal! f{zf%
逐步解释:
:%g
- 在整个文件中进行全局搜索
/\(function\_.\{-}\)\@<={/
- 查找任何“function”后的第一个“{”,并将光标放在该“{”所在字符串的开头
normal! f{zf%
- 执行向前移动到“{” f{
并用移动命令“%” zf%
将其折叠