ctags與R有任何記錄的使用? 這會很有用嗎? 難以實施嗎?Exuberant Ctags with R
具體來說,我剛開始使用Vim。 能夠在一個文件中編寫R函數,在另一個文件(例如,Rnw文件,測試文件或其他腳本)中使用該函數並且能夠使用Ctrl +]導航到功能源。
更新:我自從偶然發現了rtags函數,雖然它暗示它是emacs特有的。
ctags與R有任何記錄的使用? 這會很有用嗎? 難以實施嗎?Exuberant Ctags with R
具體來說,我剛開始使用Vim。 能夠在一個文件中編寫R函數,在另一個文件(例如,Rnw文件,測試文件或其他腳本)中使用該函數並且能夠使用Ctrl +]導航到功能源。
更新:我自從偶然發現了rtags函數,雖然它暗示它是emacs特有的。
可能你可以閱讀how to add support for a new language ctags。
這是我的主目錄中的.ctags文件的內容。我發現它在互聯網上的某個地方。使用這個你可以爲vim生成一個tags-file。
--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/
我希望它是`--langdef = R`而不是... – shabbychef 2012-05-17 17:10:40
@shabbychef因爲函數等的語言定義是相同的,所以不需要使用單獨的Ctags定義。當然,你可以把`--langdef = Splus`改成`--langdef = R`。 – 2012-10-29 10:47:33
你的編輯不太合適,@LMZ - 他們改變了Henrico的答案,以至於不再是他的答案。如果您有更好的解決方案,請將其作爲您自己的答案發布。 – 2013-01-26 22:07:34
這是對Henrico答案的修改,可以通過將以下代碼複製並粘貼到〜/ .ctags文件中來實現。 Henrico的代碼不適用於縮進函數,但下面的代碼可以。
--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和函數來識別變量。如果你使用taglist vim addon,那麼它可以讓你區分全局變量和其他變量。另外,如果您使用的是標籤列表,那麼您需要將以下內容粘貼到您的vimrc中。
let tlist_r_settings = 'R;f:Functions;g:GlobalVariables;v:FunctionVariables'
rtags()是最好的方法,從我所看到的,到目前爲止,因爲它會分配在考慮各種不同的方式,比如生成的R代碼標籤:
ok = c("<-", "=", "<<-", "assign",
"setGeneric", "setGroupGeneric", "setMethod",
"setClass", "setClassUnion")
使用rtags()的一個例子:如所提到的由其它rtags()
+ etags2ctags()
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)
可以生成一個VIM tagsfile
(參見:h tags-and-searches
)。您可以爲vim創建自定義命令,以便使用Rscript
在R中運行rtags()
。當你做:Rtags
VIM將運行外部進程Rscript
(它必須是當然的PATH
)和評估rtags(path="./", recursive=TRUE, ofile="RTAGS");etags2ctags("RTAGS", "rtags");unlink("RTAGS")
:command! Rtags :!Rscript -e 'rtags(path="./", recursive=TRUE, ofile="RTAGS")' -e 'etags2ctags("RTAGS", "rtags")' -e 'unlink("RTAGS")'
set tags+=rtags
現在:這樣做,把這個在您的.vimrc
。 rtags()
將在Emacs tags format中生成RTAGS
文件,那麼etags2ctags()
會將其轉換爲vim可以讀取的rtags
文件。 unlink()
刪除RTAGS
文件,因爲它不需要vim。
的set tags+=rtags
使得VIM爲一個rtags
文件除了搜索通常的tags
文件(見:h tags-and-searches
)
謝謝。我快速瀏覽了一下。我從來沒有使用ctags,所以它可能有點學習曲線。但我打算進一步深入。 – 2011-01-25 14:55:02