2014-02-09 87 views
3

我一直在使用ctags與下面的vim腳本,並沒有問題做我自己的小項目。但是當我進入一些大型項目時,在用C++編寫的遊戲中,ctags和cscope的遞歸命令似乎比我想象的慢得多。我實際上已經設法在背景上運行它,但似乎我的筆記本電腦非常忙於做標籤。任何人都可以爲我推薦更好的ctags解決方案嗎?

我聽說有一個解決方案,在每個子目錄中製作一個標籤,當您在特定的子目錄中工作時,您可以查閱其他子目錄的根目錄中的標籤,目錄標籤。這可能嗎?如果任何人都可以用這種方法給我具體的HOW-TOS,我將非常感激。

或者如果有更好的解決方案,我非常想知道它。

這裏是我的Vim腳本

function! UpdateTags() 
    let curdir = getcwd() 
    let gitdir = finddir('.git', '.;/') 

    if isdirectory(gitdir) 
     let l:rootdir = fnamemodify(gitdir, ':h') 
     execute 'silent cd ' . l:rootdir 
     execute 'silent !ctags -R --c++-kinds=+p --fields=+iaS --extra=+q &' 
     if has("cscope") 
      execute 'silent !cscope -Rbkq &' 
      execute 'silent cs reset' 
     endif " has("cscope") 
     execute 'silent cd ' . curdir 
    endif 
endfunction 
+0

一個可能的解決方案:[簡單的標籤與Git](http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html) –

+0

你能告訴我們你的'標籤的價值是什麼'選項? – romainl

+0

您提到的多個標記文件的方法在ctags主頁上進行了解釋:http://ctags.sourceforge.net/faq.html#15 - 但我不確定您是否會找到根標記的更新文件更快。 – mMontu

回答

1

我發現使用ctags -R比使用的ctags與像ctags -L input我在我當前的Java項目,這樣做有什麼用大約3000文件是文件慢的代碼要求git給我文件路徑,將它們收集到一個存檔(例如,javafiles.txt),然後在編輯器外部執行ctags -L javafiles.txt

如果你不想離開vim,你可以使用shellscript來調用帶有你想要的參數的Ctags。 I.E.通過下面的代碼創建你自己的Git項目的根文件autotags.sh

#!/bin/bash 

set -e 
git ls-files | sed "/\.cpp$/!d" >> cscope.files 


ctags -L cscope.files 

不要忘了給它執行權限。一旦你的shell腳本的vim腳本代碼看起來就像這樣:

function! UpdateTags() 
    let curdir = getcwd() 
    let gitdir = finddir('.git', '.;/') 

    if isdirectory(gitdir) 
     let l:rootdir = fnamemodify(gitdir, ':h') 
     execute 'silent cd ' . l:rootdir 
     execute 'silent !./autotags.sh &' 
     if has("cscope") 
      execute 'silent !cscope -bkq &' 
      execute 'silent cs reset' 
     endif " has("cscope") 
     execute 'silent cd ' . curdir 
    endif 
endfunction 

的文件名是cscope.files因爲它的名字讓cscope默認使用。你應該閱讀http://cscope.sourceforge.net/large_projects.html

但是生成的文件列表是不一樣快,你可能想和代碼需要一些調整,以逃避這一步不是在需要的時候,但總的來說,這是比使用遞歸掃描與ctagscscope更快。

相關問題