r vim ctags exuberant-ctags

Ctags exuberantes con R



vim exuberant-ctags (5)

¿Hay algún uso documentado de ctags con R? ¿Sería esto útil? ¿Sería difícil de implementar?

Específicamente, acabo de empezar a usar Vim. Sería genial poder escribir una función R en un archivo, usarla en otro (por ejemplo, un archivo Rnw, un archivo de prueba o algún otro script), y poder usar Ctrl +] para navegar a la función fuente.

Actualización: desde entonces me he topado con la función rtags , aunque sugiere que es emacs específica.


Como lo mencionaron otros rtags() + etags2ctags() puede generar un tagsfile de tagsfile para vim (ver :h tags-and-searches ). Puede crear un comando personalizado para vim para que ejecute rtags() en R usando Rscript . Para ello pon esto en tu .vimrc :

:command! Rtags :!Rscript -e ''rtags(path="./", recursive=TRUE, ofile="RTAGS")'' -e ''etags2ctags("RTAGS", "rtags")'' -e ''unlink("RTAGS")'' set tags+=rtags

Ahora cuando lo haga :Rtags vim ejecutará el proceso externo Rscript (tiene que estar en el PATH por supuesto) y evaluará rtags(path="./", recursive=TRUE, ofile="RTAGS");etags2ctags("RTAGS", "rtags");unlink("RTAGS") . rtags() generará un archivo RTAGS en formato de etiquetas Emacs y luego etags2ctags() lo transformará en un archivo rtags que vim puede leer. unlink() borra el archivo RTAGS ya que no es necesario para vim.

El set tags+=rtags hace que vim busque un archivo rtags además del archivo de tags habitual (ver :h tags-and-searches )


Esta es una modificación de la respuesta de Henrico, y puede implementarse copiando y pegando el siguiente código en sus archivos ~ / .ctags. El código de Henrico no funcionó para las funciones con sangría, pero el siguiente código sí lo hace.

--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/

Esto permite que las variables sean reconocidas con ctags y funciones. Si está utilizando el complemento vim taglist, entonces, le permite distinguir entre variables globales y otras variables. Además, si está utilizando la lista de etiquetas, deberá pegar lo siguiente en su vimrc.

let tlist_r_settings = ''R;f:Functions;g:GlobalVariables;v:FunctionVariables''


Este es el contenido de mi archivo .ctags en mi directorio de inicio. Lo encontré en algún lugar en internet. Usando esto puedes generar un archivo de etiquetas para vim.

--langdef=Splus --langmap=Splus:.s.S.R.r.q --regex-Splus=/^[ /t]+"?([.A-Za-z][.A-Za-z0-9_]*)"?[/t]*<-[/t]*function//1/ --regex-Splus=/^"?([.A-Za-z][.A-Za-z0-9_]*)"?[ /t]*<-//1/



rtags () es la mejor manera de generar etiquetas para códigos R a partir de lo que veo hasta ahora, ya que tendrá en cuenta todas las diferentes formas de tareas, como:

ok = c("<-", "=", "<<-", "assign", "setGeneric", "setGroupGeneric", "setMethod", "setClass", "setClassUnion")

Un ejemplo del uso de rtags ():

path <- "~/path/to/project" rtags(path=path, pattern = "[.]*//.[RrSs]$", keep.re = ".", # the value (''/R/'') in the help page will only run through the codes in R/ folder. verbose = TRUE, ofile = file.path(path, ''TAGS''), append = FALSE, recursive = TRUE)