I'm working in TextMate2, but this question may apply to other text editors as well.
My script is in R. I intend to use rmarkdown::render()
on the script to create a "report".
The clever part of these reports is that they distinguish between the standard comment symbol in R (#
), and the following:
#'
indicates markdown, like inroxygen
,#+
indicates that aknitr
code chunk will follow
I suck at editing TextMate2 bundles. I managed to get hotkeys set up to comment out lines with #'
and #+
, and to do it with proper indentation. Now, I wish I could edit my theme (which I designed in TextMate1) to make one of those "special" comments a different color.
I've edited the R bundle's language grammar (this is how the file starts):
{ 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'; }; };
},
);
},
And inserted the following into the middle, hoping it would let me specify a new scope for syntax highlighting:
# 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
If it would help, I could provide the rest of the language grammar, but I'm not sure it's relevant here.
I tried to be more specific when redefining the comment in the theme (previous was just comment
, which I changed to comment.line.number-sign.r
). Here are (what I think are) the relevant lines of the theme:
{ 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';
};
},
So far, I cannot achieve any difference in the syntax highlighting of a line that starts with #
versus a line that starts with #'
. I can get both to change, but no independently. Any help in figuring out how to achieve different syntax highlighting for those two would be great.