【问题标题】:How can I keep the source files of a R package so I can create tags and jump to definition in vim如何保留 R 包的源文件,以便在 vim 中创建标签并跳转到定​​义
【发布时间】:2020-06-27 13:18:25
【问题描述】:

我做了很多R,有时我需要能够跳转到给定包的函数定义。在Rstudio 中,按下Alt-click 将打开一个带有源代码的视图窗口。现在我不使用Rstudio,而是使用vimnvimr

我知道如何生成能够跳转到定义的标签(我是为自己的包做的),但是我无法从系统中找到包中的源文件,如/usr/lib64/R/library 甚至安装在我的自己的图书馆(我通过这样做)

install.packages("data.table", INSTALL_opts=c("--preclean --no-multiarch --no-lock --with-keep.source"))
# OR on the cmd line
R --vanilla CMD INSTALL --preclean --no-multiarch --no-lock --with-keep.source data.table

我本来希望 --with-keep.source 将源文件保留在库中,但我看不到它们

me@nyzls604m:~/R/x86_64-pc-linux-gnu-library/4.0/data.table$ ll R
total 880K                       
-rw-r--r-- 1 umanskyc quant 868K Jun 27 09:02 data.table.rdb       
-rw-r--r-- 1 umanskyc quant 4.5K Jun 27 09:02 data.table.rdx       
-rw-r--r-- 1 umanskyc quant 1.1K Jun 27 09:02 data.table           

因此我的问题是:Rstudio 是做什么的,有没有办法让我获得我安装的软件包的源代码,以便我可以解析它们并从 vim 获取“跳转到定义”

【问题讨论】:

  • 据我了解,这并非易事。 with-keep.source 选项保留源代码中的代码格式(例如,保留代码 cmets),这样当您在控制台中打印函数的源代码时,您可以看到作者是如何编写代码的(包括他们的 cmets);它不会将 R 脚本放在 R/ 目录中;一切仍保存在.rdb.rdx 文件中。
  • 那么 Rstudio 是如何做到的呢?
  • 好问题。我最好的猜测(特别是因为打开的查看器是只读的)是它会生成(只读)文件,该文件与函数定义一起显示,如果您只需在R 控制台。例如,假设您要查看Rcpp::cppFunction() 的来源。如果我在 RStudio 中按住 Ctrl 键单击,它会打开一个查看器窗格,其中包含 exact 与我在 R 控制台中键入 Rcpp::cppFunction 时会出现的相同信息(最后缺少一些关于命名空间的识别信息)
  • nvimr 在我看来要好得多,我开发、跳转到定义、无缝地构建包。你真的应该试试。对于这个问题,你的建议让我觉得我可能已经可以做到了,我会尽快回复答案
  • @KonradRudolph 你说得对,我认为它在做一些不同的事情,但事实并非如此,我现在正在阅读 nvimr 文档以找到执行此操作的函数

标签: r vim rstudio r-package


【解决方案1】:

如果我理解正确的话,你想要的只是“查看”一个函数的值。默认的 Nvim-R 键绑定是 Leadertp。这将打开一个新的 Vim 选项卡,显示命名对象的值。如果该对象是一个函数,它会显示它的源代码。

【讨论】:

    【解决方案2】:

    要查看 R 函数的 R 源代码,您可以在 R 控制台中键入函数名称(不带括号或参数);例如:

    > Rcpp::cppFunction
    
    function (code, depends = character(), plugins = character(), 
        includes = character(), env = parent.frame(), rebuild = FALSE, 
        cacheDir = getOption("rcpp.cache.dir", tempdir()), showOutput = verbose, 
        verbose = getOption("verbose")) 
    {
        if (!is.null(depends) && length(depends) > 0) {
    ## Additional output omitted
    

    RStudio 似乎通过使用此信息生成您提到的函数定义,创建一个只读查看器窗格,其中包含您从 R 控制台获取的相同信息。它似乎没有查找任何 R 源代码文件并跳转到所需的定义,因为它只显示了单击的函数的定义,即使 R 源代码文件在那里定义了许多函数。

    所以,我认为您无法相当获得nvimr 中您想要的功能。使用with-keep.source option 可以保留源代码中的代码格式(例如,保留代码 cmets),这样当您在控制台中打印函数的源代码时,您可以看到作者是如何编写代码的(包括他们的 cmets);它不会将 R 脚本放在 R/ 目录中;一切仍保存在.rdb.rdx 文件中。

    但是,正如我在开头提到的那样,您仍然可以通过在 R 控制台中输入它们的名称来查看这些函数定义(或者任何最方便的 nvimr 快捷方式/等效方式)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2018-02-01
      相关资源
      最近更新 更多