2012-05-24 34 views
5

標準的GNU etags不支持遞歸遍歷目錄,如旺盛的ctags -R所做的那樣。如果我只能訪問GNU etags,那麼如何使用bash shell magic來獲取etags,以便爲當前目錄中的所有C++文件*.cpp*.h文件以及當前目錄下的所有目錄遞歸創建一個TAGS表在當前目錄中具有emacs的正確路徑名稱的表來解析TAGS表項。如何使用shell魔法創建一個使用GNU etags的遞歸etags?

+0

這是怎麼回事你「只能訪問GNU etags」? Exuberant ctags可以在許多平臺上免費使用。你不能安裝它嗎? –

+0

僱主不希望未經授權的軟件安裝,如果我可以使用提供的'etags'解決問題,寧可不打。我敢打賭, – WilliamKF

回答

12

Emacs Wiki通常是解答常見問題或最佳實踐的良好來源。爲了您的具體問題有適用於Windows和Unixen既是一個解決方案:

http://www.emacswiki.org/emacs/RecursiveTags#toc2

基本上你運行一個命令,可以使用不同的文件結尾,例如找到所有.cpp和所有.h文件(更改文件選擇器如,.C)並將結果輸入到etags中。由於Windows似乎沒有xargs,因此您需要可以從stdin讀取的更新版本的etags(請注意標誌stdin的行末尾的破折號)。當然,如果你使用最新版本的etags,你也可以使用破折號參數代替xargs。

的Windows

cd c:\source-root 
dir /b /s *.cpp *.h *.hpp | etags --your_options - 

的Unix

cd /path/to/source-root 
find . -name "*.cpp" -print -or -name "*.h" -print | xargs etags --append 
0

使用find。男人找到你是否需要。

+1

和man xargs也是。 。 。 。 。或者只是安裝旺盛並使用它的etags ... – jthill

+0

爲什麼在有'-exec命令+'時使用xargs? – jordanm

1

此命令創建的ETag與默認名稱 「標籤」 立案.C,的.cpp,.CPP,.HPP, .hpp .h文件遞歸地

find . -regex ".*\.[cChH]\(pp\)?" -print | etags -