6

我经常遇到不折叠的 C 代码。如果没有折叠,阅读它们会很烦人,尤其是长文件。我怎样才能折叠它们?

4

6 回答 6

16

根据语法折叠

:set foldmethod=syntax

如果您想在要折叠的位上手动执行此操作

:set foldmethod=manual

然后通过选择/移动并按下 zf 创建新的折叠,例如

shift-v j j zf

(忽略空格)

编辑:另请参阅此答案的评论以了解缩进和标记折叠方法。

于 2009-04-17T21:59:12.770 回答
5

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

在 vim 中,包装由

:set wrap

打开它,然后

:set textwidth=80

确定 vim 应该在哪里包装文本(80 个字符通常是一个很好的措施)。

另一方面,折叠是完全不同的事情。它是 vim 将几行代码(例如,一个函数)折叠成一行代码的一种方式。它对于提高代码的可读性很有用。Vim 有几种折叠方法,你可以看到所有的折叠方法

:help folding

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

于 2009-04-17T21:58:40.167 回答
2

我已经为 C 和 C++卷起了一个折叠插件。与缩进和基于标记的折叠相比,它超越了语法折叠所做的事情(可能它可以改进,我不知道),并且展开的噪音更少且不是真正有用的东西。

警告:为了有不错的反应时间,我不得不做一些简化,有时结果很混乱(我们必须打字zx来修复它)。

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

在此处输入图像描述

于 2017-03-16T14:02:12.697 回答
1

在 vi(相对于 vim)中,答案是:

:set wm=1

这会将换行边距设置为行尾前的一个字符。这不是世界上具有可变大小窗口的最佳规范(当很难改变大小时,它对绿屏很有意义)。

这意味着在 vim 中还有另一种方法可以做到这一点:

:set textwidth=30

参见:VimDoc 用户手册第 25.1 节

于 2009-04-17T21:48:19.660 回答
1

实际上,还有另一种非常直接有效的方法,就是 usingfoldmethod = marker和 set foldmarkerto be {,}。然后折叠结果将如下所示:

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

在此处输入图像描述

  1. 当您使用 level-1 via 打开它时,这就是正常功能的样子zo

在此处输入图像描述

此外,按语法进行折叠需要一些额外的工作,这里有一个很好的教程。但是我觉得 fold bymarker={,}就足够了,最重要的是,它简单整洁。

于 2017-03-16T10:14:50.660 回答
0

你可能想要的设置

:set foldmethod=syntax

但是不要手动输入!这错过了 Vims 最大的功能之一,该功能已经内置了数百种文件类型的自定义设置。为此,请将其添加到您的 ~/.vimrc

filetype plugin on
filetype indent on

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

于 2009-04-17T22:54:43.107 回答