2010-04-02 17 views
15

Vielleicht ist eine oft wiederholte Frage hier, aber ich kann nichts Ähnliches mit der Suche finden. Der Punkt ist, dass ich gerne Emacs für meine persönlichen Projekte verwende, normalerweise sehr kleine Anwendungen mit C oder Python, aber ich frage mich, wie ich es auch für meine Arbeit benutze, in der wir mit etwa 10k Dateien Quellcode projektieren, so ist seeeehr groß (eigentlich bin ich mit Quelle Einsicht ist, dass es sehr schön Werkzeug, aber nur für Windows), Fragen sind:Verwenden von Emacs für große große Projekte

  • Searching: Welches ist der bequemste Weg, um eine Zeichenfolge innerhalb des gesamten Projekts suchen?
  • Navigating Throught die Funktion: Ich meine so etwas wie die Cursor über eine Funktion setzen, definieren, var, und die Definition
  • Refactoring

Auch wenn Sie keine Erfahrung mit dieser gehen und wollen teilen Ihre Gedanken werde ich als hochinteressant betrachten.

Br

+0

In welcher Sprache ist das große Projekt? C oder Python auch? –

+0

Komplettes Projekt beinhaltet C, C++, Python, Bash Scripting ... aber von meiner Seite, ich modifiziere nur C und C++ Dateien. –

Antwort

9

Meine Projekte leben normalerweise in git, so dass ich diese zusammen, um sie schnell suchen:

;; There's something similar (but fancier) in vc-git.el: vc-git-grep 
;; -I means don't search through binary files 
(defcustom git-grep-switches "--extended-regexp -I -n --ignore-case" 
    "Switches to pass to `git grep'." 
    :type 'string) 

(defun git-grep (command-args) 
    (interactive 
    (list (read-shell-command "Run git-grep (like this): " 
          (format "git grep %s -e " 
            git-grep-switches) 
          'git-grep-history))) 
    (let ((grep-use-null-device nil)) 
    (grep command-args))) 
+0

wow, ich benutze auch Git, das ist so nützlich und schnell !!! danke –

+0

+1 für Git Grep, obwohl es praktisch ist, um Tags zu halten. –

+0

Wenn jemand dies liest und sein Projekt nicht in Git hat, finde ich ack ist schöner als grep für die Suche nach Code. Es sucht nicht so schnell (obwohl es auf einer ziemlich großen Codebasis nicht viel langsamer ist), aber es ist viel schneller, "ack blah" einzugeben als "find. -name" * .cc "-o -name" * .h " -exec grep blah {} \; " :-) –

10

Die „traditionelle“ Art und Weise C-Quelldateien zu navigieren ist „etags“ zu verwenden, um eine Datei namens TAGS zu machen, dann ALT- verwenden. um Funktionen über Dateien hinweg aufzurufen.

Zum Suchen nach Zeichenfolgen in Dateien verwende ich normalerweise "grep". Sie können ein Shell-Skript mit allen Verzeichnissen erstellen, die Sie durchsuchen möchten, oder etwas, wenn Sie nicht mehr genug Zeit haben, sie einzugeben.

+3

Eigentlich steht Etags für Emacs-Tags, die nur eines der Formate sind, die überschwängliche Ctags produzieren können. Wenn extragente Ctags mit dem Namen Etags aufgerufen werden, erzeugt es Emacs-Format-Tag-Dateien. Wenn es unter Verwendung des Namens ctags aufgerufen wird, erzeugt es Ctags-Formatdateien. Natürlich können Sie auch Befehlszeilenoptionen übergeben, um zu steuern, welches Format verwendet wird, unabhängig vom Namen, der zum Aufrufen des Tools verwendet wird. – jamessan

+0

sehr interessant, irgendeinen speziellen Hinweis für die Verwendung von Grep in bequemer Weise, ich meine, ich fand sehr langsam jedes Mal, wenn die Grep-Optionen und Suchpfad eingeben –

+0

OK Ich entfernte das Bit über üppig. –

3

Blick von cedet zu Ede - es ist für Projekte Basis unterstützen ...

6

Es gibt auch den Browser-Emacs-Code ist. Es macht das Erkunden von Projekten viel einfacher. Weitere Informationen finden Sie unter here und here.

4

In Bezug auf Suchen im gesamten Projekt finde ich äußerst nützlich die rgrep Befehl.

Auch imenu ist ziemlich praktisch, um zu einer Funktionsdefinition in der gleichen Datei zu springen.

Das sind meine 2p.

+0

danke ich werde einen Blick auf diese Imenu-Funktion werfen –

2

Neben der Verwendung von TAGS, wie andere erwähnt haben, finde ich igrep und igrep-find sehr nützlich. Es gibt auch Emacs eingebaut in grep und grep-find, aber ich finde ihre Schnittstelle ungeschickt.

Meine Standardsuche ist:

M-x igrep-find some_regexp RET ~/work_area/*.cxx 

die für alle *.cxx Dateien unter ~/work/area aussehen wird, und zeigen die Ergebnisse passend some_regexp. Wie alle Suchwerkzeuge füllt es einen kompilationsähnlichen Puffer, den Sie mit C-x ` (aka M-x nächster Fehler) navigieren können.

2

Es gibt viele Möglichkeiten, die Icicles mit projects helfen kann. Ebenso Bookmark+ und sogar Dired+.

Diese Bibliotheken können Sie beim Erstellen, Organisieren und Verwalten von Projekten unterstützen, unabhängig davon, wo sich ihre Dateien und Verzeichnisse befinden. Und sie können Ihnen helfen, auf verschiedene Arten zu navigieren und zu suchen.

Einige der Funktionen sind einzigartig - ganz anders als bei anderen Ansätzen. Ich könnte einige der Projektunterstützung hier auflisten, aber dies ist der beste Ort für start.