r语言 - 标签: "etags: no input files specified."



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

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

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

当我将libPath移出当前目录时,我会看到6组(12行),当我将其保留在那里时,会看到两组(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

是什么导致了这些警告?有办法避开他们吗?

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

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在操作过程中解析的特定代码。一种猜测:从加载中删除代码可能会使某些操作无法顺利运行。记住,这些只是"警告"。

命令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处理的文件,并将find的输出馈送到etags中。如果您正在处理的目录或其任何子目录中没有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文件,并且在不使用--no-c标志的情况下调用R CMD rtags。该命令还将查找*.cpp文件,并使用空列表调用etags

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

最新更新