2

当我rtags(ofile="TAGS")R提示符下执行时,"TAGS"文件被写入并且终端没有输出(完全符合预期)。

当我R CMD rtags -o TAGS在 shell 提示符下执行时,"TAGS"文件也被写入,但我在终端上看到几组消息,如下所示:

etags: no input files specified.
    Try `etags --help' for a complete list of options.

当我将我移出当前目录时,我看到 6 套 - 12 行,当我将libPath其保留在那里时,我看到了两套 - 4 行。即,当处理较少的文件时,我会看到更多警告。rtags

要重现,请在目录中运行:

$ mkdir z
$ cd z
$ R --vanilla CMD rtags

Tagging R/C/Rd files under /home/sds/z; writing to TAGS (overwriting)...

etags: no input files specified.
    Try `etags --help' for a complete list of options.
etags: no input files specified.
    Try `etags --help' for a complete list of options.
etags: no input files specified.
    Try `etags --help' for a complete list of options.
etags: no input files specified.
    Try `etags --help' for a complete list of options.
etags: no input files specified.
    Try `etags --help' for a complete list of options.
etags: no input files specified.
    Try `etags --help' for a complete list of options.
Done

是什么导致了这些警告?有没有办法避免它们?

4

2 回答 2

0

当我从控制台会话运行它时,控制台的警告与您的完全不同,但它们基本上是关于遍历我的工作目录中文件的过程的毫无意义的评论:

1: In file.remove(ofile) :
cannot remove file 'TAGS', reason 'No such file or directory'
.....
: In readLines(file) :, incomplete final line found on './Untitled.R' 

我确实有几个这样的:

6: In grepl("\n", lines, fixed = TRUE) : input string 5 is invalid in this locale

有关代码中分配标记位置的真实信息进入 TAGS 文件。由于我的设置中的警告完全不同,我仍然认为您关于更改 .Library 变量时警告数量增加的问题的答案将取决于 R 在操作期间解析的特定代码。一个猜测:从加载中删除代码可能会使某些原本可以顺利运行的操作变得不可能。请记住,这些只是“警告”。

于 2013-07-03T18:22:00.393 回答
0

该命令R CMD rtags为 3 种不同类型的文件创建 TAGS 文件:R 文件、C 文件和 Rd 文件(R 文件的文档)。对于 R 文件,它使用 R 函数utils::rtags(),对于 C 和 Rd 文件,它调用etags实用程序(在 Linux 上;不确定它在 MacOS 或 Windows 上的作用)。

您看到的错误消息是etags在没有任何输入文件的情况下调用它时发出的。发生这种情况是因为R CMD rtags用于find查找要处理的文件etags并将输出馈送findetags. 如果您正在处理的目录或它的任何子目录中没有 C 或 Rd 文件,etags将使用要处理的文件的空列表调用,这将导致它打印错误消息。

您会看到几条错误消息,因为对 Rd 文件和“C 文件”有单独的调用etags,实际上包括 .c、.h、.cpp 和其他几种类型。

为了抑制这些消息,您应该明确告诉R CMD rtags不要处理您没有的文件。例如,R CMD rtags --no-c不会尝试查找 C 文件,R CMD rtags --no-Rd也不会尝试查找 Rd 文件。

因此,例如,如果您对仅标记 R 文件感兴趣,请使用R CMD rtags --no-c --no-Rd. 有关R CMD rtags --help更多详细信息,请参阅。

附带说明一下,如果您的项目中有 C 文件并且您确实希望将它们与 R 文件一起标记,您可能仍然会收到此类错误消息 - 假设您有 *.c 和 *.h 文件但没有 *.cpp文件,并且您R CMD rtags在没有--no-c标志的情况下调用。该命令还将查找 *.cpp 文件并etags使用空列表进行调用。

另一个值得一提的注意事项,虽然与问题没有直接关系,但R CMD rtags仅查找直接位于名为 .R 的目录下的 *.R 文件R。因此,不会标记具有不同名称的目录中的 R 文件。如果您需要标记此类目录中的 R 文件,或者如果您需要更大的灵活性,您可以utils::rtags()使用合适的参数从 R 会话中调用。

于 2020-09-26T20:33:16.103 回答