我正在尝试将 ctags 与 R 一起使用。使用 this我已添加的答案
--langdef=R
--langmap=r:.R.r
--regex-R=/^[ \t]*"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t]function/\1/f,Functions/
--regex-R=/^"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t][^f][^u][^n][^c][^t][^i][^o][^n]/\1/g,GlobalVars/
--regex-R=/[ \t]"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t][^f][^u][^n][^c][^t][^i][^o][^n]/\1/v,FunctionVariables
到我的.ctags
文件。但是,当尝试使用以下 R 文件生成标签时
x <- 1
foo <- function () {
y <- 2
return(y)
}
仅识别函数foo
。我也想为变量生成标签(即上面代码中的 x
和 y
)。我应该更改 ctags 文件中的正则表达式吗?提前致谢。
最佳答案
这些模式似乎不正确,因为只有为变量分配一个与“函数”长度相同但不共享任何字符的值时,该变量才会被识别。例如:
x <- aaaaaaaa
以下 ctags 配置应该可以正常工作:
--langdef=R
--langmap=R:.R.r
--regex-R=/^[ \t]*"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t]function[ \t]*\(/\1/f,Functions/
--regex-R=/^"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t][^\(]+$/\1/g,GlobalVars/
--regex-R=/[ \t]"?([.A-Za-z][.A-Za-z0-9_]*)"?[ \t]*<-[ \t][^\(]+$/\1/v,FunctionVariables/
这里的想法是函数必须后面跟着一个括号,而变量声明则不需要。鉴于正则表达式解析器的限制,此括号必须与关键字“function”出现在同一行,此配置才能起作用。
更新:R 支持将包含在 Universal Ctags 中,所以尝试一下并报告错误和缺失的功能。
关于regex - ctags 和 R 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32206608/