如何在VIM中折叠Python源代码中的长文档字符串?
有没有人知道有什么方法或者插件,可以自动折叠Python中的长文档字符串?我在代码里有一些文档字符串,长度有好几页,所以每次都翻来翻去的很麻烦。还有一个棘手的地方是,这些文档字符串里嵌入了Python测试代码,这可能会让解析变得困难。请注意,我只需要自动折叠整个文档字符串,不管里面有什么内容。
7 个回答
在你的 .vimrc 文件中添加:
" folding
set foldmethod=indent
这样设置后,每次缩进的时候就会自动折叠代码。在 Python 里,这个缩进对应的是文档字符串。效果非常好,值得一试。上面的回答是对的,但需要按很多键(真麻烦!)
我不太确定有没有插件或者自动化的功能,但如果你输入 zf/
,然后可以搜索某个内容,它会折叠到下一个出现的地方。比如在下面这样的文档中(其中 [] 是光标的位置):
def foo():
"""[]
Some long docstring
that takes up many
lines
"""
pass
首先查看 edit2 以获取更新的搜索字符串!
如果你使用命令 zf/"""[ENTER]
,它应该会把从当前行(文档字符串的开始)到下一个出现的 """
之间的所有内容折叠起来,这个 """
应该是文档字符串的结束。
我知道这不是自动化的功能,但也许这能在过渡期间帮到你,或者能引导你找到自动化的正确方向。查看 edit2 以获取更好的搜索功能,虽然我仍然不知道怎么自动化。
希望这能帮到你。
编辑:另外,你可以用 /"""\_.\{-}"""
来搜索任何文档字符串,虽然这也会返回文档字符串中的代码。如果你想搜索一个函数定义后面跟着文档字符串,可以用 /def\_.\{-}"""\_.\{-}"""
,不过这在文档字符串内部有定义时会出问题。
编辑2:其实,我再玩了一下正则表达式,发现了这个: /def.\{-}):\_s*"""\_.\{-}"""
,这应该能找到任何函数后面跟着文档字符串的情况。它会搜索 def
后面跟着任意字符,然后是 ):
,接着是换行和/或空格,之后是 """
,再后面是任意行数,直到下一个 """
,但始终确保第二个三重引号是紧接着第一个的。
这有点像是个小窍门,但你可以打开 Python 语法文件(:sp $VIMRUNTIME/syntax/python.vim
),找到所有关于三重引号字符串的语法区域(可以搜索一下 '''
和 """
)。然后在这些语句的末尾加上 fold
这个关键词。接着,只需要为 Python 文件设置 foldmethod=syntax
,这样注释就会被折叠起来了。