【问题标题】:Colour coding comments in RStudioRStudio 中的颜色编码注释
【发布时间】:2016-08-10 22:57:00
【问题描述】:

我是一个非常有眼光的人,想要区分#a command I commented out##message for myself or co-worker on the file。如果 RStudio 支持不同类型的 cmets,我环顾四周,但它看起来不像。有谁知道解决这个问题的方法吗?

谢谢!

【问题讨论】:

  • 这与 R 语言无关。代码中字体的颜色由您使用的 IDE 或文本编辑器控制,例如 RStudio、Eclipse、Notepad++ 等。有些(例如 Notepad++)允许您编辑和创建配色方案,例如您的描述。
  • @Hack-R 我可以更改字体颜色和大小等外观(我使用的是 Rstudio),我正在寻找一种可以区分代码中留下的不同类型 cmets 的方法。跨度>
  • 许多编辑以不同的方式突出显示以TODO:FIXME: 开头的cmets。
  • 您可以在 Microsoft Word 或 Open Office 中更改单词的颜色 - 如果您想知道如何操作,您可以询问有关 MS Word 或 Open Office 的问题 - 这不会成为问题关于英语。 R 是语言,RStudio(或 Eclipse、Notepad++、Sublime Text 等)是可让您显示和编辑 R 代码和任何其他代码的编辑器。代码的颜色与 R 无关,与您的编辑器有关。

标签: rstudio


【解决方案1】:

你可以使用

#'* some colorfull comment *

用颜色评论。

-R 版本 3.6.3 -RStudio ‘1.2.5033“橙花”

【讨论】:

  • 这很酷。我看你也可以#' @PurpleComment
【解决方案2】:

如前所述,这不是一个 R 问题,而是一个 RStudio 问题(我已经这样编辑过)。 RStudio 目前没有用户可修改的主题,只有内置主题。这显然是一个正在开发的功能。

与此同时,显然您可以破解 .css 文件,该文件定义了一个主题以添加您所追求的内容 - https://support.rstudio.com/hc/en-us/community/posts/200644098-appearance-Editor-theme

否则,您可以使用其他编辑器来指定所需的语法突出显示。

【讨论】:

  • 感谢您的编辑,是的,我在 RStudio 中使用特定的颜色编码 cmets。但不是为了主题,主题很好。更多的是可以对不同种类的cmets进行颜色编码。
  • 语法高亮是主题的一部分。
【解决方案3】:
#'[Red]

#'@Purple    

#'*Green*

【讨论】:

  • 请尽量解释你的答案,让别人更容易理解。
【解决方案4】:

在完全实施之前的解决方法是将this post 中解释的用户定义一元运算符与漂亮的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), "\\%"))
  }
}

这还允许用户为特殊格式的 cmets 制作查找表或定义其他行为,例如函数调用。这甚至可以扩展到双向通信,例如发送电子邮件,其中包含由svDialogs 框收集的数据以及personList() 元数据等。

"a" %comment%.
"" %comment%.

注意中缀运算符后面的点。该函数完全忽略了这一点,并且可以让 R 解释器物有所值。您可以在此处放置其他特殊格式的内容,这些内容不会被评估,但要注意运算符优先级。这可能会导致奇怪的行为,我不建议这样做。例如,R 可能会有点抱怨,但以下会运行良好。

"1" %comment% TRUE^Inf/0&NA_complex_

所有特殊格式的文件都会阻塞 Rscript,阻止编织文件正确运行等等。这是一个将脚本中的任何特殊注释格式化为常规 cmets 的函数。

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()运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 2018-11-25
    • 1970-01-01
    • 2015-10-30
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多