如何在VIM中折叠Python源代码中的长文档字符串?

9 投票
7 回答
2867 浏览
提问于 2025-04-16 00:17

有没有人知道有什么方法或者插件,可以自动折叠Python中的长文档字符串?我在代码里有一些文档字符串,长度有好几页,所以每次都翻来翻去的很麻烦。还有一个棘手的地方是,这些文档字符串里嵌入了Python测试代码,这可能会让解析变得困难。请注意,我只需要自动折叠整个文档字符串,不管里面有什么内容。

7 个回答

1

在你的 .vimrc 文件中添加:

" folding
set foldmethod=indent

这样设置后,每次缩进的时候就会自动折叠代码。在 Python 里,这个缩进对应的是文档字符串。效果非常好,值得一试。上面的回答是对的,但需要按很多键(真麻烦!)

2

我不太确定有没有插件或者自动化的功能,但如果你输入 zf/,然后可以搜索某个内容,它会折叠到下一个出现的地方。比如在下面这样的文档中(其中 [] 是光标的位置):

def foo():
    """[]
    Some long docstring
    that takes up many
    lines
    """
    pass

首先查看 edit2 以获取更新的搜索字符串!

如果你使用命令 zf/"""[ENTER],它应该会把从当前行(文档字符串的开始)到下一个出现的 """ 之间的所有内容折叠起来,这个 """ 应该是文档字符串的结束。

我知道这不是自动化的功能,但也许这能在过渡期间帮到你,或者能引导你找到自动化的正确方向。查看 edit2 以获取更好的搜索功能,虽然我仍然不知道怎么自动化。

希望这能帮到你。

编辑:另外,你可以用 /"""\_.\{-}""" 来搜索任何文档字符串,虽然这也会返回文档字符串中的代码。如果你想搜索一个函数定义后面跟着文档字符串,可以用 /def\_.\{-}"""\_.\{-}""",不过这在文档字符串内部有定义时会出问题。

编辑2:其实,我再玩了一下正则表达式,发现了这个: /def.\{-}):\_s*"""\_.\{-}""",这应该能找到任何函数后面跟着文档字符串的情况。它会搜索 def 后面跟着任意字符,然后是 ):,接着是换行和/或空格,之后是 """,再后面是任意行数,直到下一个 """,但始终确保第二个三重引号是紧接着第一个的。

10

这有点像是个小窍门,但你可以打开 Python 语法文件(:sp $VIMRUNTIME/syntax/python.vim),找到所有关于三重引号字符串的语法区域(可以搜索一下 '''""")。然后在这些语句的末尾加上 fold 这个关键词。接着,只需要为 Python 文件设置 foldmethod=syntax,这样注释就会被折叠起来了。

撰写回答