RStudio 插件通过将反斜杠(如 'C:\Marketing')更改为正斜杠来解析输入字符串文字

RStudio addin to parse input string literals by changing backslashes (as in 'C:\Marketing') into forward slashes

澄清

用函数解决这个问题是不可能的,@IInspectable 在旧的、已删除的问题下的评论中亲切地确认了这一点。 长话短说:反斜杠需要在字符串文字中转义,即需要传递 'C:\Marketing' 而不是 'C:\Marketing' 我完全了解这个和这个问题和我在下面的回答与抛出的错误、手动解决方案或使用其他相关问题中给出的其他软件(例如 AutoHotkey)无关。

请注意该问题是另一个问题的跟进,感谢@IInspectable 的宝贵意见。

"Windows" 路径...

我确实经常使用 Windows 格式的路径(如 C:\Marketing),将它们粘贴到 R 代码中。每次都更改反斜杠非常烦人,因此我试图为它们编写一个解析函数。所需的用法是在代码中使用此函数,并将复制的路径作为参数,即 path_parse('C:\Marketing')。我的第一种方法基于@Tyler Rinker 的回答 from here,如下所示:

path_parse <- function(path = 'clipboard') {
  path <- if (path == 'clipboard') readClipboard() else path
  return(chartr('\', '/', path))
}

它在复制到剪贴板的路径下工作得很好,但不幸的是抛出一条错误消息 an unrecognized escape in character string,例如this question,与粘贴的字符串文字一起使用时:

> path_parse('C:\Marketing')
Error: '\M' is an unrecognized escape in character string starting "'C:\M"

当然,手动更改所有输入字符串文字(如传递 'C:\Marketing''C:/Marketing' 而不是 'C:\Marketing')在这里不是一个选项,因为这正是我想要的原因以某种方式使其自动化。

与这个问题密切相关的一个问题是 here,但它基于 Tinn-R GUI 和 AutoHotkey 软件,我不想安装。

插件来拯救

解决方案比我想象的更接近,RStudio 插件(参见 here 如何使用它们)通过将所有反斜杠更改为正斜杠来解析所选文本(即粘贴的 "Windows" 路径)斜杠并将其插入回代码中。下面答案中的代码和屏幕截图。

一个有效的解决方案(或者更确切地说是一个解决方法,因为最初我想用一个函数来解决这个问题)

正如我在上面的问题中所写,用一个函数解决这个问题是不可能的,所以我尝试了一个不同的解决方案,它完全符合我的要求,并且可能对其他人也有用。我已经构建了一个具有以下功能的插件包 (a nice article by RStudio):

#' Parse selected "Windows" path to an "R-usable" one
#'
#' @return
#' @export
#' @importFrom rstudioapi getActiveDocumentContext
#' @importFrom magrittr '%>%'
#'
#' @examples
path_parse <- function() {
  getActiveDocumentContext()[['selection']][[1]][['text']] %>%
  { gsub('\\', '/', .) } %>%
  { gsub('//', '/', .) } %>%    # To remove double f. slashes
  { ifelse(check_for_quotes(.), insertText(.), insertText(paste0('\'', ., '\''))) }
}
### Old function:
# path_parse <- function() {
#   getActiveDocumentContext()[['selection']][[1]][['text']] %>%
#   { chartr('\', '/', .) } %>% { insertText(paste0('\'', ., '\'')) }
# }

并为其分配了 Ctrl+Alt+P 快捷方式。

基本上,它所做的是通过将所有反斜杠更改为正斜杠并将其插入回代码来解析所选文本(即粘贴的 "Windows" 路径):