动态Rstudio代码段

时间:2015-09-17 15:11:51

标签: r rstudio code-snippets

我倾向于在代码中使用大量换行符,如下所示:

# Data =========================================================================

整个评论的长度始终为80个字符(包括主题标签)。我想要做的是为Rstudio编写一个代码片段,插入主题标签,然后是空格,然后允许用户输入一系列单词,然后插入另一个空格,最后填写一堆&#34 ; ="直到达到80个字符的限制。

我不熟悉片段的工作方式,所以我不确定这有多难。

我有这么多:

snippet lb
  # ${1:name}

但我不知道如何添加动态数量的" ="迹象。此外,lb = linebreak。

3 个答案:

答案 0 :(得分:4)

不幸的是,你不能用片段做到这一点;代码段是一个文本模板,其中包含带有用户插入文本插槽的固定文本。

然而,RStudio内置了一个命令来执行非常相似的操作;从“代码”菜单中,选择“插入节”(或 Ctrl + Shift + R )。这将完全符合您的描述,但有两点不同:

  1. 该行将在打印边距之前扩展到5个字符(您可以在工具中调整打印边距 - >全局选项 - >代码。

  2. 该行由-而非=个字符组成。

  3. 以这种方式标记的部分的一个优点是,您可以使用它们折叠并在文件内导航(添加一个后查看编辑器状态栏)。

答案 1 :(得分:1)

您可以编写一个片段来操纵文本(有点)。我在下面编写了代码片段,以执行与您想要的操作类似的操作。我仍在解决问题(只问this question)。

snippet comm
    `r paste0(
        "#######################################><###################\n##  ", 
        date(), 
        " -------------------------------\n##  ", 
        eval(
            paste0(
                gsub(
                    ".{1,51}\\s?\\K\\b", 
                    "\n##  ", 
                    gsub("\\.", " ", paste0(text)), 
                    perl = T
                )
            )
        ), 
        "###################################><###################\n"
    )`

我认为,如果您使用匿名函数编写R代码段,该匿名函数接受通过$$输入的文本,计算文本中的nchar,计算所需的-数最后,然后使用eval(paste0())插入评论,您应该可以使其生效。如果发现问题,我将在此处发表评论或回答。如果您可以使用它,请对我的问题做同样的事情。谢谢。 (P.S. Go Badgers!)

答案 2 :(得分:0)

您可以使用代码段内的rstudioapi(可以返回列位置)来获取所需的内容。

下面是我使用的一个名为endhead的代码段。我通过注释标题标题然后应用代码段来使用它,例如:

# Section name endhead

结果为:

# Section name -----------------------------------------------------------------
snippet endhead
    `r paste0(rep.int("-", 88 - rstudioapi::primary_selection(rstudioapi::getActiveDocumentContext())$range$start[2]), collapse = "")`