我有一个字符串,我想使用 {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
来启动reindent
或reformatCode
命令:
如果您在编辑器中一起运行以下命令(例如使用 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/