【问题标题】:Python text-folding in TextMate 2 not folding lists/tuples/dictionariesTextMate 2中的Python文本折叠不折叠列表/元组/字典
【发布时间】:2020-06-11 20:56:39
【问题描述】:

我有点落伍了,刚刚注意到 Textmate 2 的存在——我已经使用 1.5.10 多年了。

我正在尝试,并且在某些方面改进了 Python 的代码折叠。 (在折叠的方法/类定义之后它不再吃一行空白)。但是,它不再折叠拆分为多行的列表、元组和字典。例如,以下代码在 1.5.10 中具有折叠箭头,但在 2.0.6 中没有:

foo = [
    1,
    2,
    3,
]

Python 包中的默认折叠设置为:

{   foldingStartMarker = '^\s*"""(?=.)(?!.*""")';
    foldingStopMarker = '^\s*"""\s*$';
}

默认折叠模式为:

{ foldingIndentedBlockStart = '^\s*(class|def|for|while|if|elif|else|with|try|finally|except)\b.*:\s*(#.*)?$'; }

我不完全确定这两者是如何协同工作的,特别是因为我能找到的关于折叠定义的唯一文档是 TextMate 1.5 并且看起来已经过时了。我试过摆弄他们,到目前为止无济于事。有人有什么想法吗?

【问题讨论】:

    标签: python settings textmate folding


    【解决方案1】:

    好的,事实证明,一旦我的大脑充分进入正则表达式模式,这并不难。 foldingIndentBlockStart 负责大部分 Python 折叠,也就是所有基于缩进的东西。 foldingStartMarkerfoldingStopMarker 处理所有其他折叠,尽管包的默认模式只折叠三引号文档字符串。

    我编写了一对模式来检查打开和关闭 {}、() 和 [],并支持同一行上的 cmets(以及一个逗号,以防它是较长序列的一部分)。我用 | 将我的新模式添加到现有模式中,如下所示:

    {   foldingStartMarker = '^\s*"""(?=.)(?!.*""")|(\{|\(|\[)\s*(#.*)?$';
        foldingStopMarker = '^\s*"""\s*$|^\s*(\}|\)|\]),?\s*(#.*)?$';
    }
    

    我可能遗漏了一些极端情况,但到目前为止它似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2018-12-07
      • 1970-01-01
      相关资源
      最近更新 更多