RStudio 中的颜色编码注释
Colour coding comments in RStudio
我是一个非常注重视觉的人,想要区分 #a command I commented out
和 ##message for myself or co-worker on the file
。我环顾了一下 RStudio 是否支持不同类型的评论,但它似乎并不支持。有人知道解决这个问题的方法吗?
谢谢!
如前所述,这不是一个 R 问题,而是一个 RStudio 问题(我已经这样编辑了)。 RStudio 目前没有用户可修改的主题,只有内置主题。这显然是一个开发中的功能。
与此同时,显然您可以破解定义主题的 .css
文件,或许可以添加您想要的内容 - https://support.rstudio.com/hc/en-us/community/posts/200644098-appearance-Editor-theme
否则,您可以使用其他编辑器来指定所需的语法突出显示。
您可以使用
#'* some colorfull comment *
以颜色评论。
-R 版本 3.6.3
-RStudio ‘1.2.5033 "Orange Blossom"
#'[Red]
#'@Purple
#'*Green*
在完全实施之前的解决方法是将 中解释的用户定义的一元运算符与漂亮的 crayon
包结合起来。
`%/*/<-%` <- function(name, FUN, safe = TRUE) {
`%//%` <- paste0
NAME <- "%" %//% name %//% "%"
PARENT <- parent.frame()
if (safe && exists(NAME, PARENT)) {
stop(NAME %//% " exists.")
}
assign(
x = NAME,
value = function(x, ignored) FUN(x),
envir = PARENT
)
}
`%comment%` <- "comment" %/*/<-% function(x){
cat(crayon::bgRed(x))
}
这为我们提供了一个新的中缀运算符 %comment%
,我们可以为其定义要发送到控制台的颜色或打印样式。
"hi there" %comment%.
#and to remove the operator
rm(`%comment%`)
rstudioapi
包进一步扩展了人们可以由此实现的可能性。
`%comment%` <- "comment" %/*/<-% function(x){
if (startsWith(x, "a")) {
str <- paste("Hi", Sys.info()[6], "please leave a comemnt!", sep = " ")
cat(crayon::blue(str))
} else {
rstudioapi::insertText(
text =
paste0("\%",
switch(x,
"1" = {"an entire story to be told"},
NA), "\%"))
}
}
这还允许用户为特殊格式的评论制作查找表或定义其他行为,例如函数调用。这甚至可以扩展到双向通信,例如发送电子邮件,其中包含 svDialogs
盒子收集的数据以及 personList()
元数据等。
"a" %comment%.
"" %comment%.
注意中缀运算符后面的点。这完全被函数忽略了,并且可以给 R 解释器一个 运行 的钱。你可以在这里放置额外的特殊格式的东西,这些东西不会被评估,但要注意运算符的优先级。这可能会导致奇怪的行为,我不建议这样做。例如,R 可能会有点抱怨,但下面的 运行 没问题。
"1" %comment% TRUE^Inf/0&NA_complex_
所有那些特殊格式的都可以阻塞 Rscript,阻止编织文件 运行 正确等等。这是一个函数,用于将脚本中完成的任何特殊注释格式化为常规注释。
clean <- function(detach = TRUE) {
x <- rstudioapi::getActiveDocumentContext()
cleaner <- function(doc, detach) {
clean_ind <- which(stringi::stri_detect(
str = doc$contents,
regex = "%comment%"
) == T)
for (i in seq_along(clean_ind)) {
rstudioapi::modifyRange(
id = doc$id,
text = "# ",
location = rstudioapi::document_position(
row = clean_ind[i], column = 1
)
)
}
}
tryCatch(expr = {
rstudioapi::sendToConsole(cleaner(doc = x, detach = detach),
execute = TRUE, focus = FALSE
)
}, error = function(cond) {
# rstudioapi code parameter returns error (is not character), but works
return("Script cleaned")
})
}
运行 只需 clean()
我是一个非常注重视觉的人,想要区分 #a command I commented out
和 ##message for myself or co-worker on the file
。我环顾了一下 RStudio 是否支持不同类型的评论,但它似乎并不支持。有人知道解决这个问题的方法吗?
谢谢!
如前所述,这不是一个 R 问题,而是一个 RStudio 问题(我已经这样编辑了)。 RStudio 目前没有用户可修改的主题,只有内置主题。这显然是一个开发中的功能。
与此同时,显然您可以破解定义主题的 .css
文件,或许可以添加您想要的内容 - https://support.rstudio.com/hc/en-us/community/posts/200644098-appearance-Editor-theme
否则,您可以使用其他编辑器来指定所需的语法突出显示。
您可以使用
#'* some colorfull comment *
以颜色评论。
-R 版本 3.6.3 -RStudio ‘1.2.5033 "Orange Blossom"
#'[Red]
#'@Purple
#'*Green*
在完全实施之前的解决方法是将 crayon
包结合起来。
`%/*/<-%` <- function(name, FUN, safe = TRUE) {
`%//%` <- paste0
NAME <- "%" %//% name %//% "%"
PARENT <- parent.frame()
if (safe && exists(NAME, PARENT)) {
stop(NAME %//% " exists.")
}
assign(
x = NAME,
value = function(x, ignored) FUN(x),
envir = PARENT
)
}
`%comment%` <- "comment" %/*/<-% function(x){
cat(crayon::bgRed(x))
}
这为我们提供了一个新的中缀运算符 %comment%
,我们可以为其定义要发送到控制台的颜色或打印样式。
"hi there" %comment%.
#and to remove the operator
rm(`%comment%`)
rstudioapi
包进一步扩展了人们可以由此实现的可能性。
`%comment%` <- "comment" %/*/<-% function(x){
if (startsWith(x, "a")) {
str <- paste("Hi", Sys.info()[6], "please leave a comemnt!", sep = " ")
cat(crayon::blue(str))
} else {
rstudioapi::insertText(
text =
paste0("\%",
switch(x,
"1" = {"an entire story to be told"},
NA), "\%"))
}
}
这还允许用户为特殊格式的评论制作查找表或定义其他行为,例如函数调用。这甚至可以扩展到双向通信,例如发送电子邮件,其中包含 svDialogs
盒子收集的数据以及 personList()
元数据等。
"a" %comment%.
"" %comment%.
注意中缀运算符后面的点。这完全被函数忽略了,并且可以给 R 解释器一个 运行 的钱。你可以在这里放置额外的特殊格式的东西,这些东西不会被评估,但要注意运算符的优先级。这可能会导致奇怪的行为,我不建议这样做。例如,R 可能会有点抱怨,但下面的 运行 没问题。
"1" %comment% TRUE^Inf/0&NA_complex_
所有那些特殊格式的都可以阻塞 Rscript,阻止编织文件 运行 正确等等。这是一个函数,用于将脚本中完成的任何特殊注释格式化为常规注释。
clean <- function(detach = TRUE) {
x <- rstudioapi::getActiveDocumentContext()
cleaner <- function(doc, detach) {
clean_ind <- which(stringi::stri_detect(
str = doc$contents,
regex = "%comment%"
) == T)
for (i in seq_along(clean_ind)) {
rstudioapi::modifyRange(
id = doc$id,
text = "# ",
location = rstudioapi::document_position(
row = clean_ind[i], column = 1
)
)
}
}
tryCatch(expr = {
rstudioapi::sendToConsole(cleaner(doc = x, detach = detach),
execute = TRUE, focus = FALSE
)
}, error = function(cond) {
# rstudioapi code parameter returns error (is not character), but works
return("Script cleaned")
})
}
运行 只需 clean()