如何在Vim中自动折叠长C代码?

时间:2009-04-17 21:41:51

标签: c vim folding

我经常遇到没有折叠的C代码。如果没有折叠,特别是对于长文件,阅读它们会很烦人。我怎么折叠它们?

6 个答案:

答案 0 :(得分:12)

根据语法折叠

:set foldmethod=syntax

如果您想手动对要折叠的位进行操作

:set foldmethod=manual

然后通过选择/移动并按zf来创建新的折叠 e.g。

shift-v j j zf

(忽略空格)

编辑:另请参阅此答案的注释,用于缩进和标记foldmethods。

答案 1 :(得分:5)

我想你可能混淆了术语。你需要“包装”还是“折叠”。包装是由于它们的长度通常不适合在屏幕上的线被包裹,即在屏幕上的几个连续线上显示(实际上,它是一行,在几行中 - 很难解释,最好看到实践)。

在vim包装中由

设置
:set wrap

打开它,

:set textwidth=80

确定vim应该包装文本的位置(80个字符通常是一个很好的衡量标准)。

另一方面,折叠是完全不同的事情。它是vim将几行代码(例如,一个函数)折叠成一行代码的那个。它有助于提高代码的可读性。 Vim有几种折叠方法,如果你

你可以看到所有这些方法
:help folding

你在寻找什么,我认为是,语法折叠,但我可能是错的。我建议阅读帮助页面,它不长,而且非常有用。

答案 2 :(得分:2)

我已经推出了fold plugin for C and C++。与缩进和基于标记的折叠相比,它超出了语法折叠所做的(可能是可以改进,我不知道),并且留下更少的噪音并且没有真正有用的东西展开。

警告:为了获得不错的反应时间,我不得不进行一些简化,有时结果非常混乱(我们必须输入zx来修复它。)

这是一个小小的截屏视频,看看该插件如何折叠正确平衡的C ++源代码,目前尚未修改:(

enter image description here

答案 3 :(得分:1)

在vi中(与vim相反)答案是:

:set wm=1

这会将换行边距设置为行尾之前的一个字符。这不是具有可变尺寸窗户的世界上最好的规格(当难以改变尺寸时,绿色屏幕是有意义的。)

这意味着在vim中还有另一种方法:

:set textwidth=30

请参阅:VimDoc User Manual Section 25.1

答案 4 :(得分:0)

你可能想要设置

:set foldmethod=syntax

但不要手动放入!多数人错过了其中一个Vims最大的功能,即已经内置了数百种文件类型的自定义设置。为此,请将其添加到〜/ .vimrc

filetype plugin on
filetype indent on

文件类型检测主要基于扩展名,在本例中为* .c文件。有关详细信息,请参阅:help:filetype。您还可以自定义这些基于文件类型的设置。

答案 5 :(得分:0)

实际上,还有另一种非常直接有效的方法,即使用foldmethod = marker并将foldmarker设为{,}。然后折叠结果如下:

  1. 折叠的所有功能。基本上,它看起来像IDE中的大纲。 (如果您不想在开头折叠所有内容,也可以set foldlevel=1或更多)
  2. enter image description here

    1. 当您通过zo使用level-1打开它时,这是正常函数的样子。
    2. enter image description here

      另外,要通过语法进行折叠需要一些额外的工作,这里有一个很好的tutorial。但我认为折叠marker={,}已足够,最重要的是,它简单而整洁。