2012-05-24 9 views
5

Der Standard GNU etags unterstützt einen rekursiven Durchlauf von Verzeichnissen nicht, wie von exuberant ctags -R getan. Wenn ich nur Zugriff auf die GNU-Etags habe, wie kann ich bash shell magic verwenden, um ETAGS-Tabelle für alle C++ - Dateien *.cpp und *.h Dateien im aktuellen Verzeichnis und alle Verzeichnisse unterhalb der aktuellen rekursiv zu erstellen, um eine TAGS zu erstellen Tabelle in dem aktuellen Verzeichnis, das den richtigen Pfadnamen für emacs hat, um die TAGS-Tabelleneinträge aufzulösen.Wie benutzt man Shell-Magie, um mit GNU-Etags rekursive Etags zu erzeugen?

+0

Wie ist das? hast du "nur Zugang zu den GNU-Etags"? Exuberante Ctags sind für viele Plattformen frei verfügbar. Kannst du es nicht installieren? –

+0

Der Arbeitgeber möchte nicht, dass nicht autorisierte Software installiert wird, würde das lieber nicht bekämpfen, wenn ich mit bereitgestellten 'Etags' umgehen könnte. – WilliamKF

Antwort

12

Die Emacs Wiki ist oft eine gute Quelle für Antworten auf häufige Probleme oder Best Practices. Für Ihr spezielles Problem gibt es eine Lösung für Windows und Unixen:

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

Grundsätzlich führen Sie einen Befehl, um alle .cpp und alle .h Dateien (ändern Datei-Selektoren zu finden, wenn Sie verschiedene Dateiendungen verwenden, wie zB , .C) und leiten Sie das Ergebnis in Etags. Da Windows keine Xargs zu haben scheint, benötigen Sie eine neuere Version von Etags, die von stdin lesen können (beachten Sie den Bindestrich am Ende der Zeile, der stdin symbolisiert). Wenn Sie eine aktuelle Version von Etags verwenden, können Sie natürlich auch den Dash-Parameter anstelle von Xargs verwenden.

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

Verwendung finden. Mann finden, wenn Sie müssen.

+1

und Man Xargs auch, ich wette. . . . . oder installieren Sie einfach überschwänglich und verwenden Sie ihre Etags ... – jthill

+0

Warum verwenden Sie xargs, wenn es '-exec Befehl +'? – jordanm

1

Dieser Befehl erstellt etags mit Standardnamen "TAGS" für C, CPP, .Cpp, .hpp Datei, .Hpp .h-Dateien rekursiv

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