2010-09-25 21 views
8

Actualmente estoy en el comienzo de un proceso de cambio de Emacs. Sin embargo, tengo dos problemas básicos.Emacs busca y abre múltiples archivos y busca en todos los buffers

  1. ¿Cómo busco múltiples archivos recursivamente desde una ruta específica? Supongo que tengo que usar find/grep/dired pero no estoy seguro. Por ejemplo, me gustaría encontrar todos los archivos *.scala en la ruta C:/src/xxx. Cuando se encuentren estos archivos, también me gustaría abrirlos todos en el búfer a la vez. La única forma en que estoy familiarizado actualmente es C-xC-f.

  2. Cuando todos estos archivos están en el búfer, ¿cómo busco entre todos los buffers, y obtengo algún tipo de lista del resultado y/o quizás puedo navegar de un resultado a otro? Diciendo que me gustaría encontrar todos los lugares con el texto case Int => ocurren.

+0

http://www.emacswiki.org/emacs/SearchBuffers, http://www.emacswiki.org/emacs/CategorySearchAndReplace – Anycorn

+0

http://www.emacswiki.org/emacs/Icicles_ -_File-Name_Input – Anycorn

Respuesta

8

Estoy de acuerdo con la respuesta de phimuemue, pero también señalaré M-x rgrep, que ejecutará el find/grep necesario para presentar todas las coincidencias sin abrir los archivos. Al seleccionar una coincidencia, se abre el archivo correspondiente en ese número de línea. En algunas situaciones, esto puede ser preferible a la apertura de todos esos archivos.

Véase también éstos:

3

Para la Parte A, podría parecer here.

para la parte B es posible echar un vistazo a multi-occur-in-matching-buffers, que te permite especificar los buffers que desea tomar (por ejemplo, todos los tampones .*.scala para buscar en todos los archivos Scala) y lo que debe buscar (por ejemplo case Int =>). Esto le da una lista de todas las ocurrencias.

0

Creo que estás limitando artificialmente la respuesta. No necesita cargar todos los archivos en Emacs para encontrar esas ocurrencias. Y, una vez que haya encontrado las ocurrencias de la expresión regular, puede saltar fácilmente a la línea en el archivo con una pulsación de tecla.

Mi forma favorita de hacer esto es utilizar M-x-igrep encontrar porque me gusta la interfaz igrep mejor que Emacs de grep-find.

puede encontrar la biblioteca igrep en EmacsWiki: igrep.el

Y el uso sería

M-x igrep-find case Int => RET 

que rellenar un tampón con todos los partidos, y luego (como en producirse, grep-encontrar , compilación, etc.) puede usar Cx ` o Mx próximo error para recorrer las coincidencias.

1

Está tratando de encontrar todas las apariciones de "case Int =>" en *.archivos scala en C:/src

La manera más fácil (asumiendo una configuración predeterminada de Emacs) es usar M-x rgrep. Te pedirá una cadena de búsqueda, un tipo de archivo y un directorio (en ese orden, y las indicaciones estarán etiquetadas para que no haya confusión). Solo escriba case Int =>, *.scala y C:/src/xxx.

Lo que debe ver es un nuevo búfer con una lista de ocurrencias de "case Int =>" en todos los archivos .scala en ese directorio. Si hace clic en una ocurrencia, Emacs abrirá ese archivo y navegará a la línea que lo contiene.

Como nota, si intenta buscar y reemplazar en varios archivos, puede hacerlo utilizando las opciones dired. Puede encontrar información sobre esa opción here.

1

* Para la pregunta A ***

En carámbanos, C-x C-f es por defecto un múltiples comandos. Eso significa que cuando se completa con un conjunto de nombres de archivo:

  • Puede actuar sobre (por ejemplo, la visita) múltiples candidatos, de forma selectiva (por ejemplo C-RET, C-ratón-2).

  • Puede actuar en todos los archivos cuyos nombres coincidan con su entrada actual; por ejemplo, visítelos todos.

Lo mismo es cierto para otros carámbanos comandos de archivos, incluyendo aquellos que le permiten coincidir con un nombre de archivo absoluto, lo que significa que sus patrones de minibúfer pueden igualar no sólo la parte no directorio del nombre de archivo, pero el directorio partes también.

Por ejemplo, C-x C-f con un prefijo arg coincide con nombres de archivos absolutos. Y M-x icicle-locate-file hace lo mismo para todos los archivos en un directorio determinado.

(Siempre se puede utilizar un multi-comando como un comando ordinaria: Cx Cf actúa normalmente si se utiliza RET o ratón-2 Si usted no utiliza las asociaciones de teclas adicionales para actuar. varios archivos, entonces nunca sabrán la diferencia.)

Ver http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input


* En la pregunta B ***

Lo que quiere es Icicles búsqueda.

  • Comando icicle-search-file busca en todos los archivos del conjunto que especifique.
  • Comando icicle-search-buffer búsquedas Todos los tampones de un conjunto especificado.
  • Comando icicle-search hace dos archivos: con un argumento prefijo negativo, tampones con un argumento prefijo no negativo.

Estos comandos le permiten especificar una expresión regular para definir los contextos de búsqueda: las partes de los archivos o búferes que desea buscar. Por ejemplo, .* significa buscar cada línea.

Después de definir los contextos de búsqueda escriba algún texto en el minibúfer, y estrecha los contextos búsqueda de candidatos a los que se ajustan a su texto. Puede pulsar M-SPC para combinar múltiples patrones.

A continuación, se puede navegar a los resultados de búsqueda seleccionados: C-RET o C-ratón-2 para visitar, o ciclo/visita usando C-abajo. Incluso puede ordenar los candidatos coincidentes de varias maneras, compararlos fácilmente o cambiar el orden de los ciclos.

Ver http://www.emacswiki.org/emacs/Icicles_-_Search_Commands%2c_Overview

Cuestiones relacionadas