如何在TextMate中为Python注释启用块折叠?

如何在TextMate中为Python注释启用块折叠?,python,comments,textmate,block,folding,Python,Comments,Textmate,Block,Folding,在TextMate 1.5.10 r1623中,您可以使用小箭头折叠方法块: 不幸的是,如果您有一条多行Python注释,它无法识别它,因此您无法折叠它: def foo(): """ How do I fold these comments? """ print "bar" TextMate在其网站上提供了有关如何定制折叠的信息: …但我对正则表达式的熟练程度还不足以应对它。TextMate使用正则表达式API,我使用的是默认的Python.tmbundle,通过GetBun

在TextMate 1.5.10 r1623中,您可以使用小箭头折叠方法块:

不幸的是,如果您有一条多行Python注释,它无法识别它,因此您无法折叠它:

def foo():
 """
 How do
 I fold
 these comments?
 """

 print "bar"
TextMate在其网站上提供了有关如何定制折叠的信息:

…但我对正则表达式的熟练程度还不足以应对它。TextMate使用正则表达式API,我使用的是默认的Python.tmbundle,通过GetBundles更新为最新版本

有人知道怎么做吗?提前感谢您的帮助!:)


在捆绑包编辑器的Python语言下添加Python.tmbundle的默认
foldingStartMarker
foldingStopMarker
regex值:

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

foldingStartMarker='^\s*(def | class)\s+([.a-zA-Z0-9_p>多行注释折叠似乎在TextMate中可以工作,但您必须按照如下方式排列引号:

""" Some sort of multi
    line comment, which needs quotes
    in just the right places to work. """
似乎就是这样:

根据,如果您一直遵循它,则Python不支持正确的代码折叠。基本上,在foldingStartMarker和foldingStopMarker中实现的正则表达式不允许捕获,因此“end fold”开头的间距量无法与“begin fold”匹配


Textmate的创建者Allan Odgaard并没有最终正式地解决这个问题;但是,由于该线程是从2005年开始的,我认为这是一个死问题,不会得到支持。

这不应该是将foldingStartMarker和foldingStopMarker定义为
的问题吗“|”“
?@delnan,我认为你的思路是对的。当前的正则表达式值有点复杂(我将它们添加到了上面的问题中)。很有趣。这解释了为什么如果你在注释中的空白行中添加制表符,它仍然允许折叠(它将其视为空白,并将其视为普通字符)。这是正确的,但您没有提到一个重要事实,即您的第21行需要一个与第18行对应的选项卡,否则它将无法工作。