如何在 rstudioapi::insertText 中使用缩进
How to use indentation with `rstudioapi::insertText`
我有一个字符串,我想使用 {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} 或 base R,我不想使用其他包。查看 documentation insertText
也有一个位置参数,它与位置或范围一起使用脚本。我不确定这是否可以以某种方式用于包含缩进。
我也在看 {datapasta} 包,它也使用 {rstudioapi} 和 here output_context
中使用了 "num_spaces_for_tab"
选项(在名为oc$nspc
),但我不确定如何将它应用到我的问题中。
我没有听说 rstudioapi
库中有 缩进功能。
但是我知道,styler
有这个可能。
也许,对你也有帮助。
例子:
library(styler)
test_str <- "for (i in seq_along(x)) {\nout[[i]] <- sum(x[[i]])\n}" #your code
style_text(test_str, indent_by = 3)
一次输出:
for (i in seq_along(x)) {
out[[i]] <- sum(x[[i]])
}
让我们将其添加到 insertText
> rstudioapi::insertText(style_text(test_str, indent_by = 3))
named list()
> for (i in seq_along(x)) {
+ out[[i]] <- sum(x[[i]])
+ }
有效吗?
一个补充
也许是这个?
将 \t
添加到我们的字符串中。
test_str <- "for (i in seq_along(x)) {\n\tout[[i]] <- sum(x[[i]])\n}"
因为你想看到两个空格,所以我们这样做:
> insertText(gsub('\t',' ', test_str))
named list()
> for (i in seq_along(x)) {
+ out[[i]] <- sum(x[[i]])
+ }
祝你好运;)
您可以使用 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。
我有一个字符串,我想使用 {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} 或 base R,我不想使用其他包。查看 documentation insertText
也有一个位置参数,它与位置或范围一起使用脚本。我不确定这是否可以以某种方式用于包含缩进。
我也在看 {datapasta} 包,它也使用 {rstudioapi} 和 here output_context
中使用了 "num_spaces_for_tab"
选项(在名为oc$nspc
),但我不确定如何将它应用到我的问题中。
我没有听说 rstudioapi
库中有 缩进功能。
但是我知道,styler
有这个可能。
也许,对你也有帮助。
例子:
library(styler)
test_str <- "for (i in seq_along(x)) {\nout[[i]] <- sum(x[[i]])\n}" #your code
style_text(test_str, indent_by = 3)
一次输出:
for (i in seq_along(x)) {
out[[i]] <- sum(x[[i]])
}
让我们将其添加到 insertText
> rstudioapi::insertText(style_text(test_str, indent_by = 3))
named list()
> for (i in seq_along(x)) {
+ out[[i]] <- sum(x[[i]])
+ }
有效吗?
一个补充
也许是这个?
将 \t
添加到我们的字符串中。
test_str <- "for (i in seq_along(x)) {\n\tout[[i]] <- sum(x[[i]])\n}"
因为你想看到两个空格,所以我们这样做:
> insertText(gsub('\t',' ', test_str))
named list()
> for (i in seq_along(x)) {
+ out[[i]] <- sum(x[[i]])
+ }
祝你好运;)
您可以使用 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。