当我在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()
。