2010-04-02 25 views
15

Tal vez sea una pregunta que se repite a menudo aquí, pero no encuentro nada similar con la búsqueda. El punto es que me gusta usar Emacs para mis proyectos personales, usualmente aplicaciones muy pequeñas usando C o python, pero me preguntaba cómo usarlo también para mi trabajo, en el cual tenemos proyectos con aproximadamente 10k archivos de código fuente, por lo que es muuuy grande (en realidad estoy usando visión fuente, que es muy buena herramienta, pero sólo para windows), las preguntas son:Uso de Emacs para grandes proyectos grandes

  • búsqueda: ¿Cuál es la forma más conveniente para buscar una cadena dentro de todo el proyecto?
  • Navegando A TRAVÉS la función: me refiero a algo como poner el cursor sobre una función, definir, var, e ir a la definición
  • Refactoring

También si usted tiene alguna experiencia con esto y quiere compartir tus pensamientos lo consideraré muy interesante.

Br

+0

¿En qué idioma está el proyecto grande? C o Python, también? –

+0

El proyecto completo incluye C, C++, python, bash scripting ... pero por mi parte, solo estoy modificando los archivos C y C++. –

Respuesta

9

Mis proyectos normalmente viven en Git, por lo que poner esto junto a ellos buscar rápidamente:

;; 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, también uso git, ¡eso es tan útil y rápido! gracias –

+0

+1 por git grep, aunque es útil para mantener etiquetas también. –

+0

Si alguien está leyendo esto y no tiene su proyecto en git, me parece que ack es mejor que grep para buscar código. No busca tan rápido (aunque no es mucho más lento en una base de código bastante grande) pero es mucho más rápido escribir "ack blah" que "encontrar. -name" * .cc "-o -name" * .h " -exec grep blah {} \; " :-) –

10

La forma "tradicional" de navegar por los archivos de origen C es el uso de "etags" para hacer un archivo llamado ETIQUETAS, a continuación, utilizar ALT-. para ir a funciones en todos los archivos.

Para buscar cadenas en archivos, suelo usar "grep". Puede hacer un script de shell con todos los directorios que desee buscar o algo así si se cansa de escribirlos cada vez.

+3

En realidad, etags significa etiquetas emacs, que es solo uno de los formatos que los ctags exuberantes pueden producir. Cuando se invocan ctags exuberantes usando el nombre etags, produce archivos de etiqueta de formato emacs. Cuando se invoca usando el nombre ctags, produce archivos de formato ctags. Por supuesto, también puede pasarle las opciones de línea de comando para controlar qué formato se usa independientemente del nombre utilizado para invocar la herramienta. – jamessan

+0

muy interesante, cualquier sugerencia especial para usar grep de manera más conveniente, me refiero a que encontré muy lento para ingresar cada vez que las opciones grep y la ruta de búsqueda –

+0

OK quité el bit sobre exuberante. –

3

vistazo a EDE de CEDET - que proporcionan soporte de base para proyectos ...

6

También existe el Navegador de código Emacs. Hace que explorar proyectos sea mucho más simple. Consulte here y here para obtener más información.

4

En cuanto a las búsquedas en todo el proyecto, me parece extremadamente útil el comando rgrep.

También, imenu es bastante útil para ir a una definición de función en el mismo archivo.

Estos son mis 2p.

+0

gracias voy a echar un vistazo a esta función imenu –

2

Además de usar TAGS como otros han mencionado, encuentro igrep y igrep-find muy útiles. También está Emacs 'construido en grep y grep-find, pero me parece que su interfaz es más torpe.

Mi búsqueda estándar es:

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

que buscará todos los archivos bajo *.cxx~/work/area, y mostrar los resultados coincidentes some_regexp. Al igual que todas las utilidades de búsqueda, llena un búfer de compilación que puede navegar usando C-x ` (también conocido como M-x próximo error).

2

Hay muchas maneras en que puede ayudar con Iciclesprojects. Del mismo modo, Bookmark+ e incluso Dired+.

Estas bibliotecas pueden ayudarlo a crear, organizar y administrar proyectos, dondequiera que residan sus archivos y directorios. Y pueden ayudarlo a navegar y buscar de varias maneras.

Algunas de las características son únicas, bastante diferentes de otros enfoques. Podría hacer una lista del apoyo del proyecto aquí, pero este es el mejor lugar para start.

Cuestiones relacionadas