在vim/gvim中折叠评论和所有功能

9

我是一个对vim不熟悉的新手,我在互联网上找不到折叠函数的方法。我已经弄清楚了如何使用“zfa}”和“zfa)”折叠C语言中的参数列表,但我无法弄清如何折叠注释部分。请问如何做到这一点?

第二个问题与之相关,是否有一种方法可以同时折叠文件中所有的函数/参数列表/注释?

3个回答

23
你提到的功能被称为“折叠”(参见:help usr_28)。如果选项foldmethod设置为“marker”或“manual”,则使用zf命令手动创建折叠。在你提供的示例中,你正在使用a}a)文本对象指定区域进行折叠(请参见:help usr_4.8)。
对于C语言,你可以使用setlocal foldmethod=syntax,折叠区域将自动由语法规则确定。只有在为C文件设置此选项时才应这样做,方法之一是将设置放在~/.vim/ftplugin/c.vim中,或在~/.vimrc中加入以下autocmd。
autocmd FileType c setlocal foldmethod=syntax

注意:这两种方法都需要启用文件类型检测(filetype on),而ftplugin解决方案需要启用文件类型插件(filetype plugin on)。后者是前者的超集,因此您不需要在~/.vimrc中使用这两个命令。

至于打开/关闭当前缓冲区中的所有折叠,可以分别使用zRzM命令。


还需要一件事。语法很好,但是它不允许我定义zfa),以便我可以折叠参数列表。我有一些非常长的列表,我不需要看到其中的内容,自动折叠会非常方便,但在语法模式下无法实现,而且我有太多函数,无法使用定义模式。 - Andrew Redd
很遗憾,您不能同时使用多个foldmethod,并且手动创建折叠仅适用于标记/手动方法。您可以将语法/c.vim从系统范围的目录复制到~/.vim/syntax/c.vim,并在cParen语法定义的末尾添加“fold”关键字。缺点是每当新的Vim主要版本发布时,您都需要这样做,以便不会丢失上游所做的任何更改。它还要求您将打开的“{”放在单独的一行上,否则它的折叠将覆盖参数列表折叠。 - jamessan

5
请将以下设置添加到~/.gvimrc文件中:
"folding settings
set foldmethod=indent   "fold based on indent
set foldnestmax=10      "deepest fold is 10 levels
set nofoldenable        "dont fold by default
set foldlevel=1         "this is just what i use

然后您可以使用za切换折叠。您可以使用zM折叠所有内容,使用zR展开所有内容。 zm和zr可用于调整这些折叠。如果遇到困难,请始终记住“help:folding”中的万能帮助文件。

来源:http://smartic.us/2009/04/06/code-folding-in-vim/


0
假设您已经按照自己的意愿设置了折叠区域,请将foldlevel设置为所需级别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接