如何在TextMate中启用Python注释的代码块折叠?

4
在 TextMate 1.5.10 r1623 中,你可以使用小箭头折叠方法块: alt text
不幸的是,如果你有一个多行的 Python 注释,它无法识别,因此你无法将其折叠:
def foo():
 """
 How do
 I fold
 these comments?
 """

 print "bar"

TextMate网站上有关于如何自定义折叠的内容:http://manual.macromates.com/en/navigation_overview#customizing_foldings

但我不太擅长正则表达式,无法对其进行任何修改。TextMate使用Oniguruma正则表达式API,而我正在使用通过GetBundles更新到最新版本的默认Python.tmbundle。

有人知道如何实现吗?感谢您提前的帮助! :)


在Bundle Editor中的Python语言下添加默认的foldingStartMarkerfoldingStopMarker正则表达式值:

foldingStartMarker = '^\s*(def|class)\s+([.a-zA-Z0-9_ <]+)\s*(\((.*)\))?\s*:|\{\s*$|\(\s*$|\[\s*$|^\s*"""(?=.)(?!.*""")';
foldingStopMarker = '^\s*$|^\s*\}|^\s*\]|^\s*\)|^\s*"""\s*$';

那不应该是将 foldingStartMarker 和 foldingStopMarker 定义为 """|''' 的事吗? - user395760
@delnan,我认为你走在了正确的道路上。当前的正则表达式值有点复杂(我已将它们添加到上面的问题中)。 - Dave
2个回答

2

看起来在TextMate中多行注释折叠确实有效,但您必须像下面这样精确对齐引号:

""" Some sort of multi
    line comment, which needs quotes
    in just the right places to work. """

看起来就是这样:

在此输入图片描述

在此输入图片描述


1
这是正确的,但你没有提到一个重要的事实,即你的第21行需要与第18行对应的制表符,否则它将无法工作。 - Alex Gray

1
根据this Textmate Mailing list thread,如果你一直跟到最后,Python的适当代码折叠是不被支持的。基本上,由于在foldingStartMarker和foldingStopMarker中实现的正则表达式不允许捕获,因此“结束折叠”开头的空格数量无法与“开始折叠”匹配。
这个问题并没有得到Textmate的创建者Allan Odgaard的最终和官方解决;然而,由于该线程来自2005年,我认为这是一个已经过时的问题,不会得到支持。

有趣。这就解释了为什么如果在注释中键入空白行,它仍然允许折叠(因为空格被视为空白符并像正常字符一样对待)。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接