在TextMate2注释中间使用备用语法高亮显示

根据评论的本质,这可能没有意义。

另一方面,我试图实现的与逃生角色并无太大区别。

作为一个简单的例子,我想# comment :break: comment显示更像喜欢

#comment 
"break" 
# comment

会,但没有第二个# ,一切都在同一行,而不是引号我有其他转义字符。 虽然,像引号(而不像我熟悉的转义字符[例如 ]),我打算明确指出评论中断的开始和结束。

感谢@Graham P Heath,我能够在这个问题上实现替代形式的评论。 我所追求的是对那里取得的成就的一种提升。 在我的场景中, #是我正在使用的语言(R)和#'中的注释,既作为R注释又作为另一种语言的代码的开始。 现在,我可以得到一切后#'采取语法高亮是从典型的[R评论不同,但我试图让语法高亮的一个非常温和的量在这个子语言( #'实际上表明开始的markdown代码,并且我希望在一对`)文本环绕声中突出显示“raw”语法。

我试图中断的语言语法片段如下:

{   begin = '(^[ t]+)?(?=#'' )';
            end = '(?!G)';
            beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; };
            patterns = (
                {   name = 'comment.line.number-sign-tick.r';
                    begin = "#' ";
                    end = 'n';
                    beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
                },
            );
        },

我很确定我已经弄明白了。 以前我不明白的是该范围如何工作。 我仍然不完全理解它,但是我现在已经足够了解为每种语法类型的beginend创建嵌套定义(正则表达式)。

范围确定让事情变得更加简单! 以前,我想像(?<=A#'s.*)($)那样使用正则表达式来在#'风格的注释中查找美元符号......但显然这不会工作,因为重复*+不会出于同样的原因)。 通过范围界定,已经暗示我们必须在A#'s匹配之前匹配$

这是我的语言语法的相关部分:

{   begin = '(^[ t]+)?(?=#'' )';
            end = '(?!G)';
            beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; };
            patterns = (

                {   name = 'comment.line.number-sign-tick.r';
                    begin = "#' ";
                    end = 'n';
                    beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };


                    patterns = (

                        // Markdown within Comment
                        {   name = 'comment.line.number-sign-tick-raw.r';
                            begin = '(`)(?!s)'; // backtick not followed by whitespace
                            end = '(?<!s)(`)'; // backtick not preceded by whitespace
                            beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
                        },

                        // Equation within comment
                        {   name = 'comment.line.number-sign-tick-eqn.r';
                            begin = '((?<!G)([$]{1,2})(?!s))';
                            end = '(?<!s)([$]{1,2})';
                            beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };

                            // Markdown within Equation
                            patterns = (
                                {   name = 'comment.line.number-sign-tick-raw.r';
                                    begin = '(`)(?!s)'; // backtick not followed by whitespace
                                    end = '(?<!s)(`)'; // backtick not preceded by whitespace
                                    beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
                                },
                            );
                        },
                    );
                },

            );
        },

这里是一些R代码:

# below is a `knitr` (note no effect of backticks) code chunk
#+ codeChunk, include=FALSE


# normal R comment, follow by code
data <- matrix(rnorm(6,3, sd=7), nrow=2)

#' This would be recognized as markdown by `knitr::spin()`, with the preceding portion as "raw" text
`note that this doesnt go to the 'raw' format ... it is normal code!`

#+ anotherChunk
# also note how the dollar signs behave normally
data <- as.list(data)
data$blah <- "blah"
`data`[[1]] # backticks behaving

#' I can introduce a Latex-style equation, filling in values from R using `knitr` code chunks: $frac{top}{bottom}=frac{`r topValue`}{`r botValue`}$ then continue on with markdown.

在进行这些更改后,以下是TextMate2中的内容: 在这里输入图像描述

相当不错,除了当他们进入方程式时,被挑出的棋子会斜体字。 我可以忍受这一点。 我甚至可以说服我自己,我希望这样()顺便说一下,我指定fontName='regular'作为新的快递员,所以我不知道为什么会被覆盖)

链接地址: http://www.djcxy.com/p/52365.html

上一篇: Use alternate syntax highlighting in middle of TextMate2 comment

下一篇: Is it possible to have custom keywords in trac syntax highlighting?