2011-01-25 20 views
19

R ile ctags belgelenmiş kullanımı var mı? Bu yararlı olur mu? Uygulanması zor mu?R ile birleştirilmiş Ctags

Özellikle, Vim'i kullanmaya başladım. Bir dosyada bir R işlevi yazabilmek, başka bir dosyada işlevi (ör. Bir Rnw dosyası, sınama dosyası veya başka bir komut dosyası) kullanabilmek ve Ctrl +] 'ı kullanabilmek için güzel olabilir. işlev kaynağı.

Güncelleme: Bu yana, belirli bir emacs olduğunu düşündürmesine rağmen, rtags işlevinde tökezledim.

cevap

3

Muhtemelen how to add support for a new language'u ctags'a okuyabilirsiniz.

+0

Teşekkür (:h tags-and-searches bakınız) olağan tags dosyaya ek olarak bir rtags dosyayı aramak için vim yapar. Buna hızlıca baktım. Asla ctags kullanmadım, bu yüzden bir öğrenme eğrisi biraz olabilir. Ama daha çok içine girmeyi planlıyorum. –

9

Bu, ev dizinimdeki .ctags dosyamın içeriği. İnternette bir yerde buldum. Bunu kullanarak vim için bir etiket dosyası oluşturabilirsiniz.

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

Keşke bunun yerine '--langdef = R' olsaydı ... – shabbychef

+0

@shabbychef İşlevlerin ve benzerlerinin dil tanımı eşit olduğundan, ayrı bir Ctags tanımının kullanılmasına gerek yoktur. Tabii ki, sadece --langdef = Splus'ı '--langdef = R' olarak değiştirebilirsiniz. –

+0

Düzenlemeleriniz gerçekten uygun değil, @LMZ - Henrico'nun cevabının o kadar çok değiştiğini ve yanıtının artık olmadığını söyledi. Daha iyi bir çözümünüz varsa, lütfen kendi yanıtınız olarak gönderin. –

11

Bu Henrico en cevabın bir değişikliktir ve kopyalama tarafından uygulanan ve kişinin ~/.ctags dosyalarına aşağıdaki kodu yapıştırarak edilebilir. Henrico'nun kodu girintili işlevler için çalışmadı, ancak aşağıdaki kod yok.

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

Bu, değişkenlerin işlevlerin yanı sıra ctags ile tanınmasına izin verir. Eğer etiket listesi vim addon kullanıyorsanız, o zaman, global değişkenler ve diğer değişkenler arasında ayrım yapmanıza izin verir. Ayrıca, eğer etiket listesi kullanıyorsanız, aşağıdakileri vimrc'inize yapıştırmanız gerekecektir.

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

TagBar vim eklentisini kullananlar: https://github.com/majutsushi/tagbar/wiki#r – gkcn

+1

Bu cevabın yanlış olduğunu düşünüyorum! Http://stackoverflow.com/questions/32206608/ctags-and-r-regex adresini kontrol edin – Vitor

2

rtags() Ne zaman bu gibi dikkate atamaları tüm farklı yollarını alacak beri, bugüne kadar gördüklerinizden R kodları için etiketleri oluşturmak için yol en iyisidir:

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

rtags() kullanılarak bir örnek:

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) 
+1

Bu yararlıdır, çıktılar nasıl [tag: vim] ile entegre edilebilir? – Konrad

1

(:h tags-and-searches bakınız) vim için tagsfile üretebilir diğer rtags() + etags2ctags() tarafından belirtildiği gibi. Vim için özel bir komut oluşturabilir, böylece Rscript kullanarak R'de rtags() çalıştırın. böylece senin .vimrc bu koyacağım için:

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

Artık (tabii PATH olmak zorunda) dış sürecini Rscript çalıştırmak ve rtags(path="./", recursive=TRUE, ofile="RTAGS");etags2ctags("RTAGS", "rtags");unlink("RTAGS") değerlendirecek :Rtags vim söz vardır. rtags(), Emacs tags format'da bir RTAGS dosyası oluşturur ve etags2ctags(), bunu vim'in okuyabileceği bir rtags dosyasına dönüştürecektir. unlink(), vim için gerekli olmadığından RTAGS dosyasını siler.

set tags+=rtags

İlgili konular