在Vim中折叠Python代码

18 投票
3 回答
8194 浏览
提问于 2025-04-17 02:20

我试过很多Python代码折叠的插件,也看到有人在这里问过这个问题,但这些插件似乎都没什么用,无法以我想要的方式实现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插件了。

3 个回答

0

我一直在寻找一个折叠Python方法的方式,这个方式可以在方法签名跨越多行时仍然保留整个签名。这个脚本对我来说有效。不过,要让多行签名正常工作,你需要在你的.vimrc文件中添加“let g:ifold_mode=2”。

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

0

我几乎总是使用 set foldmethod=indent 这个设置,它能做到你想要的功能,除了不能折叠类的全局变量。

你可以查看帮助文档,了解如何调整这个设置。

9

描述

因为Python代码依赖于空白字符来区分代码块,而不是用明确的符号,所以正确折叠Python代码有点棘手。Vim自带的Python语法定义根本没有折叠的指令,最简单的解决办法是使用:set foldmethod=indent,但这样通常会折叠比你想要的更多的内容。

虽然有很多Vim插件可以改善Python代码的折叠,但大多数插件的算法都很复杂,常常在一些特殊情况下出现奇怪的bug。SimpylFold的目标正如它的名字所暗示的那样:为Python提供简单而正确的折叠。它只做必要的事情:正确折叠类和函数/方法的定义,而不去碰你的循环和条件块。没有多余的东西:不需要处理无关的选项(而其他一些插件就是这样),也没有让你头疼的算法选择(因为只有一个是正确的);它就是这么简单,直接好用。

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

撰写回答