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

4 投票
2 回答
3686 浏览
提问于 2025-04-16 09:38

在 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.tmbundle 添加默认的 foldingStartMarkerfoldingStopMarker 正则表达式值:

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

2 个回答

2

看起来在TextMate中,多行注释的折叠功能是可以用的,但你需要把引号对齐,像这样:

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

这样就可以了:

在这里输入图片描述

在这里输入图片描述

1

根据这个Textmate邮件列表的讨论,如果你仔细看完,会发现Textmate对Python的代码折叠功能并不支持。简单来说,代码折叠的起始和结束标记使用的正则表达式不支持捕获,这就导致“结束折叠”前面的空格数量无法和“开始折叠”前面的空格数量匹配。

这个问题并没有得到Textmate的创始人Allan Odgaard的正式回应;不过因为这个讨论是2005年的,我猜这个问题已经不再被关注,也不会得到支持。

撰写回答