2011-02-02 118 views
2

我想在textmate中为markdown启用代码折叠。如何在TextMate中为折扣启用代码折叠?

具体来说,我希望任何标题(文本前面有一个或多个'#'字符)作为将在它与下一个标题和/或水平规则之间切换块的行。例如:

# Level 1 Heading - I'd like the block below to fold 

The text I'd like to fold away 

## Level 2 Heading 

More text... 

BBEdit似乎为降价做到了这一点。 TextMate支持代码折叠,适用于表示带有成对(和相同缩进)大括号的块的语言。

我知道TextMate提供了两个变量,您可以在语言语法文件中设置,但我需要更多的正则表达式才能比我具有的才能。以下就是目前居住在降价语言语法的代码折叠设置:

foldingStartMarker = '(?x) 
    (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?> 
    |<!--(?!.*-->) 
    |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))) 
    )'; 
foldingStopMarker = '(?x) 
    (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)> 
    |^\s*--> 
    |(^|\s)\} 
    )'; 

任何帮助,不胜感激!

回答

2

TextMate扁平化不能做到这一点。

TextMate的语言解析器逐行读取文件。这意味着为了让代码被折叠,需要有一个开始标记和一个结束标记。像<ul></ul>。在这种情况下,由于一个部分的结尾没有被标记为下一部分的开头以外的任何内容,因此逐行解析器无法返回并且说空行应该标记代码折叠块的结尾。

这有道理吗?

1

Macromates blog上,他们解释了如何为降价启用基本代码折叠。只要您使用“#”符号作为标题,就可以在标题级折叠。

对于降价的折叠设置(作用域为text.html.markdown),让我们来看看一些偷偷摸摸的模式:

{ foldingIndentedBlockStart = '^#+\s+'; foldingIndentedBlockIgnore = '^(?!#+\s+)'; }

我们让一个标题是一个开始标记,然后我们有效地忽略所有不是标题的东西,导致这些线条被包含在可折叠块中,尽管没有缩进。这使您可以将Markdown文档的整个部分折叠为标题。