我在TextMate2工作,但这个问题也可能适用于其他文本编辑器。
我的脚本在R中。我打算在脚本上使用rmarkdown::render()
来创建"report"。
这些报告的聪明部分是它们区分R(#
)中的标准注释符号和以下内容:
#'
表示降价,例如roxygen
,#+
表示knitr
code chunk will follow 我很擅长编辑TextMate2包。我设法将热键设置为使用#'
和#+
注释掉行,并使用适当的缩进来执行此操作。现在,我希望我可以编辑我的主题(我在TextMate1中设计)来制作其中一个" special"评论不同的颜色。
我编辑了R bundle的语言语法(这就是文件的启动方式):
{ patterns = (
{ name = 'comment.line.pragma-mark.r';
match = '^(#pragma[ \t]+mark)[ \t](.*)';
captures = {
1 = { name = 'comment.line.pragma.r'; };
2 = { name = 'entity.name.pragma.name.r'; };
};
},
{ begin = '(^[ \t]+)?(?=#)';
end = '(?!\G)';
beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; };
patterns = (
{ name = 'comment.line.number-sign.r';
begin = '#';
end = '\n';
beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
},
);
},
并将以下内容插入中间,希望它能让我为语法高亮指定一个新的范围:
# START MY STUFF
{ 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'; }; };
},
);
},
# END MY STUFF
如果它有用,我可以提供其余的语言语法,但我不确定它是否与此相关。
我在重新定义主题中的评论时尝试更加具体(之前只是comment
,我将其更改为comment.line.number-sign.r
)。以下是(我认为是)主题的相关部分:
{ name = 'Comment';
scope = 'comment.line.number-sign.r';
settings = {
fontStyle = 'italic';
foreground = '#279797';
};
},
{ name = 'Comment';
scope = 'comment.line.number-sign-tick.r';
settings = {
fontStyle = 'italic';
foreground = '#C5060B';
};
},
到目前为止,我无法在以#
开头的行与以#'
开头的行的语法高亮显示方面有任何差异。我可以让两者都改变,但不能独立。任何有关如何为这两者实现不同语法高亮的帮助都会很棒。
答案 0 :(得分:1)
TextMate更喜欢自定义语法的第一个范围comment.line.number-sign.r
。我所做的只是将您的代码粘贴到我的comment.line.number-sign.r定义之上,而不是按照您的指示粘贴,并扩展您现有的语法/主题。
以下是我所拥有的:
在捆绑编辑器中 - > R - >语言语法 - > [R
{ patterns = (
//default block
{ name = 'comment.line.pragma-mark.r';
match = '^(#pragma[ \t]+mark)[ \t](.*)';
captures = {
1 = { name = 'comment.line.pragma.r'; };
2 = { name = 'entity.name.pragma.name.r'; };
};
},
//your block
{ 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'; }; };
},
);
},
//my block
{ begin = '(^[ \t]+)?(?=#\+)';
end = '(?!\G)';
beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; };
patterns = (
{ name = 'comment.line.number-sign-plus.r';
begin = '#\+';
end = '\n';
beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
},
);
},
//default caption block
{ begin = '(^[ \t]+)?(?=#)';
end = '(?!\G)';
beginCaptures = { 1 = { name = 'punctuation.whitespace.comment.leading.r'; }; };
patterns = (
{ name = 'comment.line.number-sign.r';
begin = '#';
end = '\n';
beginCaptures = { 0 = { name = 'punctuation.definition.comment.r'; }; };
},
);
},
//...
然后,在我的主题中:
//...
{ name = 'Comment';
scope = 'comment.line.number-sign.r';
settings = {
fontStyle = 'italic';
foreground = '#279797';
};
},
{ name = 'Comment';
scope = 'comment.line.number-sign-tick.r';
settings = {
fontStyle = 'italic';
foreground = '#C5060B';
};
},
{ name = 'Comment';
scope = 'comment.line.number-sign-plus.r';
settings = {
fontStyle = 'italic';
foreground = '#ff00ff';//fix this color(!)
};
},
);
}
我不使用R,所以我只是用谷歌搜索了一个包含所有3种评论的快速示例。 Here's the file I used to test