【问题标题】:Python code folding with Vim使用 Vim 折叠 Python 代码
【发布时间】:2011-11-17 12:00:50
【问题描述】:

我尝试了一堆 Python 代码折叠插件,并且我曾看到有人问过这个问题 here,但它们似乎都不太有用,无法以这种方式实现 Python 代码折叠:

class myClass(models.Model):
    [folded code]

    class Meta:
        [folded code]

    def __unicode__(self):
        [folded code]

    def save(self, *args, **kwargs):
        [folded code]

所以我的问题是,有没有 Python 代码折叠插件可以做到这一点? 到目前为止我还没有找到任何一个,我已经尝试了很多这样的 Vim 插件已经。

【问题讨论】:

    标签: python vim folding


    【解决方案1】:

    说明

    由于它依赖于重要的空格而不是显式的块分隔符,因此正确折叠 Python 代码可能会很棘手。与 Vim 捆绑在一起的 Python 语法定义根本不包含任何折叠指令,最简单的解决方法是 :set foldmethod=indent,这通常最终折叠的次数比你真正想要的要多得多。

    不乏用于改进 Python 折叠的 Vim 插件,但大多数似乎都受到拼凑算法的困扰,在极端情况下会出现奇怪、难以处理的错误。 SimpylFold 旨在正如其名称所暗示的那样:简单、正确的 Python 折叠。它只不过是它需要的:它正确地折叠类和函数/方法定义,并且保持你的循环和条件块不变。不涉及 BS:不搞不相关的选项(其他几个插件都会这样做),不选择让你头疼的算法(因为只有一个是正确的);它只是工作,简单。

    http://www.vim.org/scripts/script.php?script_id=3723

    【讨论】:

    • 看起来很有希望。我已经尝试过这个插件了。试一试!谢谢!
    • 这似乎不起作用。移动到类 myClass 正下方的行并点击 za 但整个类折叠(并且所有类方法都被隐藏)而不是如上所述折叠。
    • 这可能是有用的信息,但我的理解是不鼓励将裸链接作为答案。如果您稍微充实一下(例如,插入说明性文字),您就有机会获得一些支持。
    【解决方案2】:

    我几乎总是使用set foldmethod=indent,它几乎可以完成您想要它做的事情(除了折叠类全局变量)。

    查看帮助以了解如何调整它。

    【讨论】:

      【解决方案3】:

      我一直在寻找同样的东西,一种用于 python 的折叠方法,即使它跨越多行也会保留整个方法签名。这个script 为我工作。但是,要使多行签名起作用,您需要将“let g:ifold_mode=2”添加到您的 .vimrc 文件中。

      我没有使用这个脚本很长时间,所以它可能还有其他问题。祝你好运!

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 2013-03-09
        • 2011-03-20
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多