r - 如何使用 `rstudioapi::insertText` 缩进

标签 r rstudio rstudioapi

我有一个字符串,我想使用 {rstudioapi} 将其以缩进形式粘贴到 RStudio 中。这是一个简单的测试字符串:

test_str <- "for (i in seq_along(x)) {\nout[[i]] <- sum(x[[i]])\n}"
cat(test_str)

#> for (i in seq_along(x)) {
#> out[[i]] <- sum(x[[i]])
#> }

复制控制台输出并将其手动粘贴到 RStudio 中的 R 脚本中时,输出具有正确的缩进,一个制表符等于两个空格(我的默认设置):

# this is my desired output (directly in a script, not the console):
for (i in seq_along(x)) {
  out[[i]] <- sum(x[[i]])
}

使用 rstudioapi::insertText 时,字符串将不带缩进地插入到脚本中:

rstudioapi::insertText(test_str)

for (i in seq_along(x)) {
out[[i]] <- sum(x[[i]]) # one tab (equalling two spaces) is missing
}

使用 rstudioapi::insertText 或 {rstudioapi} 包中的任何其他函数时如何添加缩进?

阅读文档我发现如何阅读系统缩进首选项:

rstudioapi::readRStudioPreference("num_spaces_for_tab")
#> 2

但是,我不知道如何让 insertText 使用此信息。

更多上下文:
我正在寻找一种以编程方式向字符串输出添加缩进的方法。这意味着,我不想手动添加 \t 到应该有缩进的行。我在一个包中,必须处理用户输入,这使得计算所需的正确缩进量可能非常困难。在上面的示例中,第 1 行和第 3 行不需要缩进,而第 2 行则需要一个制表符或两个空格。

理想情况下,除了 {rstudioapi} 或基本 R 之外,我不想使用其他包。查看 documentation insertText 还有一个位置参数,可用于脚本中的位置或范围。我不确定这是否可以以某种方式用于包含缩进。

我还在查看 {datapasta} 包,它也使用 {rstudioapi} 和 here "num_spaces_for_tab"选项用于output_context(在名为oc$nspc的脚本中),但我不确定如何应用这就是我的问题。

最佳答案

您可以使用rstudioapi::executeCommand来启动reindentreformatCode命令:

如果您在编辑器中一起运行以下命令(例如使用 ctrl+A Ctrl+Enter):

test_str <- "for (i in seq_along(x)) {\nout[[i]] <- sum(x[[i]])\n}"
rstudioapi::insertText(test_str)

# Should be adapted to the range you want to reformat (here : all lines)
ranges <- rstudioapi::document_range(c(1, 0), c(Inf, Inf))
rstudioapi::setSelectionRanges(ranges)
rstudioapi::executeCommand('reformatCode')

你得到:

for (i in seq_along(x)) {
  out[[i]] <- sum(x[[i]])
}

可用命令 ID 列表已可用 here .

关于r - 如何使用 `rstudioapi::insertText` 缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70572072/

相关文章:

R:在名称依赖于输入的函数中制作数据帧

rstudio - RStudio是否可以加快编译后在Sumatra中预览PDF的速度?

r - 关于解决dotInPolys错误的建议(maptools)

R 不会在最新的 Windows 10 更新后运行

r - 完成多个并行运行的R作业后如何运行另一个Rscript?

r - sf 对象在 R data.table 中创建为列表

r - 如何正确地连接R中的比迪字符串?

javascript - 在 Shiny 的应用程序中捕获 iframe 中的点击