当我在rtags(ofile="TAGS")
提示符处R
时,会写入"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
导致这些警告的原因是什么? 有没有办法避免它们?
答案 0 :(得分: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在操作期间解析的特定代码。猜测:从加载代码中删除代码可能会使某些操作无法进行,否则这些操作将无法正常运行。请记住,这些只是警告'。
答案 1 :(得分: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
处理的文件,并将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文件,然后调用不带R CMD rtags
标志的--no-c
。该命令还将查找* .cpp文件,并使用空白列表调用etags
。
值得一提的另一个注意事项,尽管与问题没有直接关系,但R CMD rtags
仅查找直接位于名为R
的目录下的* .R文件。因此,具有不同名称的目录中的R文件将不会被标记。如果您需要标记此类目录中的R文件,或者需要更大的灵活性,则可以使用适当的参数从R会话中调用utils::rtags()
。