在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'; }; };
},
);
},
我很确定我已经弄明白了。 以前我不明白的是该范围如何工作。 我仍然不完全理解它,但是我现在已经足够了解为每种语法类型的begin
和end
创建嵌套定义(正则表达式)。
范围确定让事情变得更加简单! 以前,我想像(?<=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'
作为新的快递员,所以我不知道为什么会被覆盖)
上一篇: Use alternate syntax highlighting in middle of TextMate2 comment
下一篇: Is it possible to have custom keywords in trac syntax highlighting?