【发布时间】:2009-04-17 21:41:51
【问题描述】:
我经常遇到不折叠的 C 代码。如果没有折叠,阅读它们会很烦人,尤其是长文件。我该如何折叠它们?
【问题讨论】:
我经常遇到不折叠的 C 代码。如果没有折叠,阅读它们会很烦人,尤其是长文件。我该如何折叠它们?
【问题讨论】:
根据语法折叠
:set foldmethod=syntax
如果您想在要折叠的位上手动执行此操作
:set foldmethod=manual
然后通过选择 / 移动并按下 zf 创建新的折叠 例如
shift-v j j zf
(忽略空格)
编辑:另请参阅此答案的 cmets 以了解缩进和标记折叠方法。
【讨论】:
zM 关闭所有打开的折叠,zR 打开所有折叠。 (也可以在这里列出这些内容)
help z 和help zf 以获得关于折叠的完整解释。 +1
我认为您可能混淆了术语。你需要“包装”还是“折叠”。换行是由于长度而通常不适合屏幕的行被换行,即显示在屏幕上的几行连续的行上(实际上,它是一行,分几行 - 很难解释,最好在练习)。
在 vim 中换行是由
:set wrap
打开它,然后
:set textwidth=80
确定 vim 应该在哪里换行(80 个字符通常是一个不错的方法)。
另一方面,折叠是完全不同的事情。它是 vim 将几行代码(例如,一个函数)折叠成一行代码的一种方式。它对于提高代码的可读性很有用。 Vim 有几种折叠方法,你可以看到所有的方法
:help folding
我认为您正在寻找的是语法折叠,但我可能是错的。我推荐阅读帮助页面,它不长,而且非常有用。
【讨论】:
我已经注册了fold plugin for C and C++。与缩进和基于标记的折叠相比,它超越了语法折叠所做的事情(可能它可以改进,我不知道),并且展开的噪音更少且不是真正有用的东西。
警告:为了获得合适的反应时间,我不得不进行一些简化,有时结果会很混乱(我们必须输入 zx 来修复它)。
这里有一个小截屏,看看插件如何折叠正确平衡的 C++ 源代码,目前没有修改:(
【讨论】:
在 vi(相对于 vim)中,答案是:
:set wm=1
这会将换行边距设置为行尾前的一个字符。这不是世界上最好的可变大小窗口规范(当很难改变大小时,它对绿屏很有意义)。
这意味着在 vim 中还有一种替代方法:
:set textwidth=30
【讨论】:
其实还有一种非常直接有效的方法,就是使用foldmethod = marker,将foldmarker设置为{,}。然后折叠结果如下所示:
set foldlevel=1或更多,如果你不想一开始就折叠所有东西)zo 使用level-1 打开一个普通函数时的样子。此外,按语法进行折叠需要一些额外的工作,这里有一个很好的tutorial 关于它。不过我觉得 fold by marker={,} 就足够了,最重要的是,它简单整洁。
【讨论】:
你可能想要的设置
:set foldmethod=syntax
但不要手动输入!这错过了 Vims 最大的功能之一,该功能已经内置了数百种文件类型的自定义设置。为此,请将其添加到您的 ~/.vimrc
filetype plugin on
filetype indent on
文件类型检测主要基于扩展名,在本例中为 *.c 文件。请参阅 :help :filetype 了解更多信息。您还可以自定义这些基于文件类型的设置。
【讨论】: