【问题标题】:How can I automatically fold a long C code in Vim?如何在 Vim 中自动折叠较长的 C 代码?
【发布时间】:2009-04-17 21:41:51
【问题描述】:

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

【问题讨论】:

    标签: c vim folding


    【解决方案1】:

    根据语法折叠

    :set foldmethod=syntax
    

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

    :set foldmethod=manual
    

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

    shift-v j j zf
    

    (忽略空格)

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

    【讨论】:

    • 还有一种我喜欢的缩进折叠模式,因为它适用于大多数东西。
    • 另外值得一提的是 foldmethod=marker。当我想忽略大块时,我使用它并在 cmets 中使用 {{{ 和 }}} 手动标记部分。
    • 顺便说一句,zM 关闭所有打开的折叠,zR 打开所有折叠。 (也可以在这里列出这些内容)
    • 如果你有 Vim 文档,试试help zhelp zf 以获得关于折叠的完整解释。 +1
    • 你如何看待 Luc Hermitte 在回答中的提议?
    【解决方案2】:

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

    在 vim 中换行是由

    :set wrap
    

    打开它,然后

    :set textwidth=80
    

    确定 vim 应该在哪里换行(80 个字符通常是一个不错的方法)。

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

    :help folding
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        :set wm=1
        

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

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

        :set textwidth=30
        

        见:VimDoc User Manual Section 25.1

        【讨论】:

        • 很好的提示,但我认为 OP 是在询问代码折叠,而不是换行。
        • 好的; “代码折叠”不是我以前遇到过的术语,所以我接受修改。
        • 您如何看待 Luc Hermitte 在新答案中的提议?
        • @LéoLéopoldHertz준영:我对此没有任何看法。我没有使用过该插件,也没有任何计划这样做。
        【解决方案5】:

        其实还有一种非常直接有效的方法,就是使用foldmethod = marker,将foldmarker设置为{,}。然后折叠结果如下所示:

        1. 所有功能都折叠了。基本上,它看起来像 IDE 中的大纲。 (你也可以set foldlevel=1或更多,如果你不想一开始就折叠所有东西)

        1. 这是通过zo 使用level-1 打开一个普通函数时的样子。

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

        【讨论】:

          【解决方案6】:

          你可能想要的设置

          :set foldmethod=syntax
          

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

          filetype plugin on
          filetype indent on
          

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

          【讨论】:

            猜你喜欢
            • 2011-06-14
            • 2023-03-23
            • 2010-09-12
            • 2011-11-17
            • 2010-10-08
            • 1970-01-01
            • 1970-01-01
            • 2013-03-09
            • 1970-01-01
            相关资源
            最近更新 更多